Arithmetic-operations.xhtml 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">
  3. <head>
  4. <title>Arithmetic operations</title>
  5. <link rel="stylesheet" type="text/css" href="docbook-epub.css"/>
  6. <link rel="stylesheet" type="text/css" href="kawa.css"/>
  7. <script src="kawa-ebook.js" type="text/javascript"/>
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.79.1"/>
  9. <link rel="prev" href="Numbers.xhtml" title="Quantities and Numbers"/>
  10. <link rel="next" href="Numerical-input-and-output.xhtml" title="Numerical input and output"/>
  11. </head>
  12. <body>
  13. <header/>
  14. <section class="sect1" title="Arithmetic operations" epub:type="subchapter" id="Arithmetic-operations">
  15. <div class="titlepage">
  16. <div>
  17. <div>
  18. <h2 class="title" style="clear: both">Arithmetic operations</h2>
  19. </div>
  20. </div>
  21. </div>
  22. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877111776" class="indexterm"/> <code class="function">real-valued?</code> <em class="replaceable"><code><em class="replaceable"><code>obj</code></em></code></em></p>
  23. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877108848" class="indexterm"/> <code class="function">rational-valued?</code> <em class="replaceable"><code><em class="replaceable"><code>obj</code></em></code></em></p>
  24. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877105920" class="indexterm"/> <code class="function">integer-valued?</code> <em class="replaceable"><code><em class="replaceable"><code>obj</code></em></code></em></p>
  25. <div class="blockquote">
  26. <blockquote class="blockquote">
  27. <p>These numerical type predicates can be applied to any kind of argument.
  28. The <code class="literal">real-valued?</code> procedure returns <code class="literal">#t</code> if the object is a
  29. number object and is equal in the sense of <code class="literal">=</code> to some real number
  30. object, or if the object is a NaN, or a complex number object whose real
  31. part is a NaN and whose imaginary part is zero in the sense of
  32. <code class="literal">zero?</code>. The <code class="literal">rational-valued?</code> and <code class="literal">integer-valued?</code>
  33. procedures return <code class="literal">#t</code> if the object is a number object and is equal
  34. in the sense of <code class="literal">=</code> to some object of the named type, and otherwise
  35. they return <code class="literal">#f</code>.
  36. </p>
  37. <pre class="screen">(real-valued? +nan.0) ⇒ #t
  38. (real-valued? +nan.0+0i) ⇒ #t
  39. (real-valued? -inf.0) ⇒ #t
  40. (real-valued? 3) ⇒ #t
  41. (real-valued? -2.5+0.0i) ⇒ #t
  42. (real-valued? -2.5+0i) ⇒ #t
  43. (real-valued? -2.5) ⇒ #t
  44. (real-valued? #e1e10) ⇒ #t
  45. (rational-valued? +nan.0) ⇒ #f
  46. (rational-valued? -inf.0) ⇒ #f
  47. (rational-valued? 6/10) ⇒ #t
  48. (rational-valued? 6/10+0.0i) ⇒ #t
  49. (rational-valued? 6/10+0i) ⇒ #t
  50. (rational-valued? 6/3) ⇒ #t
  51. (integer-valued? 3+0i) ⇒ #t
  52. (integer-valued? 3+0.0i) ⇒ #t
  53. (integer-valued? 3.0) ⇒ #t
  54. (integer-valued? 3.0+0.0i) ⇒ #t
  55. (integer-valued? 8/4) ⇒ #t
  56. </pre>
  57. <div class="blockquote">
  58. <blockquote class="blockquote">
  59. <p><span class="emphasis"><em>Note:</em></span> These procedures test whether a given number object can be
  60. coerced to the specified type without loss of numerical accuracy.
  61. Specifically, the behavior of these predicates differs from the behavior
  62. of <code class="literal">real?</code>, <code class="literal">rational?</code>, and <code class="literal">integer?</code> on complex number
  63. objects whose imaginary part is inexact zero.
  64. </p>
  65. </blockquote>
  66. </div>
  67. <div class="blockquote">
  68. <blockquote class="blockquote">
  69. <p><span class="emphasis"><em>Note:</em></span> The behavior of these type predicates on inexact number
  70. objects is unreliable, because any inaccuracy may affect the result.
  71. </p>
  72. </blockquote>
  73. </div>
  74. </blockquote>
  75. </div>
  76. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877092816" class="indexterm"/> <code class="function">exact-integer?</code> <em class="replaceable"><code>z</code></em></p>
  77. <div class="blockquote">
  78. <blockquote class="blockquote">
  79. <p>Returns <code class="literal">#t</code> if <em class="replaceable"><code>z</code></em> is both exact and an integer; otherwise
  80. returns <code class="literal">#f</code>.
  81. </p>
  82. <pre class="screen">(exact-integer? 32) ⇒ #t
  83. (exact-integer? 32.0) ⇒ #t
  84. (exact-integer? 32/5) ⇒ #f
  85. </pre>
  86. </blockquote>
  87. </div>
  88. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877087776" class="indexterm"/> <code class="function">finite?</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  89. <div class="blockquote">
  90. <blockquote class="blockquote">
  91. <p>Returns <code class="literal">#t</code> if <em class="replaceable"><code>z</code></em> is finite real number
  92. (i.e. an infinity and not a NaN),
  93. or if <em class="replaceable"><code>z</code></em> is a complex number
  94. whose real and imaginary parts are both finite.
  95. </p>
  96. <pre class="screen">(finite? 3) ⇒ #t
  97. (finite? +inf.0) ⇒ #f
  98. (finite? 3.0+inf.0i) ⇒ #f
  99. </pre>
  100. </blockquote>
  101. </div>
  102. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877082576" class="indexterm"/> <code class="function">infinite?</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  103. <div class="blockquote">
  104. <blockquote class="blockquote">
  105. <p>Return <code class="literal">#t</code> if <em class="replaceable"><code>z</code></em> is
  106. an infinite real number (<code class="literal">+int.0</code> or <code class="literal">-inf.0</code>),
  107. or if <em class="replaceable"><code>z</code></em> is a complex number where either
  108. real or imaginary parts or both are infinite.
  109. </p>
  110. <pre class="screen">(infinite? 5.0) ⇒ #f
  111. (infinite? +inf.0) ⇒ #t
  112. (infinite? +nan.0) ⇒ #f
  113. (infinite? 3.0+inf.0i) ⇒ #t
  114. </pre>
  115. </blockquote>
  116. </div>
  117. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877076368" class="indexterm"/> <code class="function">nan?</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  118. <div class="blockquote">
  119. <blockquote class="blockquote">
  120. <p>For a real numer returns whether its is a NaN;
  121. for a complex number if the real or imaginary parts or both is a NaN.
  122. </p>
  123. <pre class="screen">(nan? +nan.0) ⇒ #t
  124. (nan? 32) ⇒ #f
  125. (nan? +nan.0+5.0i) ⇒ #t
  126. (nan? 1+2i) ⇒ #f
  127. </pre>
  128. </blockquote>
  129. </div>
  130. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877072288" class="indexterm"/> <code class="function">+</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em> <em class="replaceable"><code>…</code></em></p>
  131. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877069008" class="indexterm"/> <code class="function">*</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em> <em class="replaceable"><code>…</code></em></p>
  132. <div class="blockquote">
  133. <blockquote class="blockquote">
  134. <p>These procedures return the sum or product of their arguments.
  135. </p>
  136. <pre class="screen">(+ 3 4) ⇒ 7
  137. (+ 3) ⇒ 3
  138. (+) ⇒ 0
  139. (+ +inf.0 +inf.0) ⇒ +inf.0
  140. (+ +inf.0 -inf.0) ⇒ +nan.0
  141. (* 4) ⇒ 4
  142. (*) ⇒ 1
  143. (* 5 +inf.0) ⇒ +inf.0
  144. (* -5 +inf.0) ⇒ -inf.0
  145. (* +inf.0 +inf.0) ⇒ +inf.0
  146. (* +inf.0 -inf.0) ⇒ -inf.0
  147. (* 0 +inf.0) ⇒ +nan.0
  148. (* 0 +nan.0) ⇒ +nan.0
  149. (* 1.0 0) ⇒ 0.0
  150. </pre>
  151. <p>For any real number object <em class="replaceable"><code>x</code></em> that is neither infinite nor NaN:
  152. </p>
  153. <pre class="screen">(+ +inf.0 <em class="replaceable"><code>x</code></em>) ⇒ +inf.0
  154. (+ -inf.0 <em class="replaceable"><code>x</code></em>) ⇒ -inf.0
  155. </pre>
  156. <p>For any real number object <em class="replaceable"><code>x</code></em>:
  157. </p>
  158. <pre class="screen">(+ +nan.0 <em class="replaceable"><code>x</code></em>) ⇒ +nan.0
  159. </pre>
  160. <p>For any real number object <em class="replaceable"><code>x</code></em> that is not an exact 0:
  161. </p>
  162. <pre class="screen">(* +nan.0 <em class="replaceable"><code>x</code></em>) ⇒ +nan.0
  163. </pre>
  164. <p>The behavior of <code class="literal">-0.0</code> is illustrated by the following examples:
  165. </p>
  166. <pre class="screen">(+ 0.0 -0.0) ⇒ 0.0
  167. (+ -0.0 0.0) ⇒ 0.0
  168. (+ 0.0 0.0) ⇒ 0.0
  169. (+ -0.0 -0.0) ⇒ -0.0
  170. </pre>
  171. </blockquote>
  172. </div>
  173. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877055440" class="indexterm"/> <code class="function">-</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  174. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877052688" class="indexterm"/> <code class="function">-</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>2</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>3</sub></code></em> <em class="replaceable"><code>…</code></em></p>
  175. <div class="blockquote">
  176. <blockquote class="blockquote">
  177. <p>With two or more arguments, this procedures returns the difference of
  178. its arguments, associating to the left. With one argument, however, it
  179. returns the negation (additive inverse) of its argument.
  180. </p>
  181. <pre class="screen">(- 3 4) ⇒ -1
  182. (- 3 4 5) ⇒ -6
  183. (- 3) ⇒ -3
  184. (- +inf.0 +inf.0) ⇒ +nan.0
  185. </pre>
  186. <p>The behavior of <code class="literal">-0.0</code> is illustrated by the following examples:
  187. </p>
  188. <pre class="screen">(- 0.0) ⇒ -0.0
  189. (- -0.0) ⇒ 0.0
  190. (- 0.0 -0.0) ⇒ 0.0
  191. (- -0.0 0.0) ⇒ -0.0
  192. (- 0.0 0.0) ⇒ 0.0
  193. (- -0.0 -0.0) ⇒ 0.0
  194. </pre>
  195. </blockquote>
  196. </div>
  197. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877042880" class="indexterm"/> <code class="function">/</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  198. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877040016" class="indexterm"/> <code class="function">/</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>2</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>3</sub></code></em> <em class="replaceable"><code>…</code></em></p>
  199. <div class="blockquote">
  200. <blockquote class="blockquote">
  201. <p>If all of the arguments are exact, then the divisors must all be
  202. nonzero. With two or more arguments, this procedure returns the
  203. quotient of its arguments, associating to the left. With one argument,
  204. however, it returns the multiplicative inverse of its argument.
  205. </p>
  206. <pre class="screen">(/ 3 4 5) ⇒ 3/20
  207. (/ 3) ⇒ 1/3
  208. (/ 0.0) ⇒ +inf.0
  209. (/ 1.0 0) ⇒ +inf.0
  210. (/ -1 0.0) ⇒ -inf.0
  211. (/ +inf.0) ⇒ 0.0
  212. (/ 0 0) ⇒ exception &amp;assertion
  213. (/ 3 0) ⇒ exception &amp;assertion
  214. (/ 0 3.5) ⇒ 0.0
  215. (/ 0 0.0) ⇒ +nan.0
  216. (/ 0.0 0) ⇒ +nan.0
  217. (/ 0.0 0.0) ⇒ +nan.0
  218. </pre>
  219. <p>If this procedure is applied to mixed non–rational real and non–real
  220. complex arguments, it either raises an exception with condition type
  221. <code class="literal">&amp;implementation-restriction</code> or returns an unspecified number
  222. object.
  223. </p>
  224. </blockquote>
  225. </div>
  226. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877030928" class="indexterm"/> <code class="function">floor/</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  227. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877027744" class="indexterm"/> <code class="function">truncate/</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  228. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877024560" class="indexterm"/> <code class="function">div-and-mod</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  229. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667877021376" class="indexterm"/> <code class="function">div0-and-mod0</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  230. <div class="blockquote">
  231. <blockquote class="blockquote">
  232. <p>These procedures implement number–theoretic integer division.
  233. They accept two real numbers <em class="replaceable"><code>x</code></em> and <em class="replaceable"><code>y</code></em> as operands,
  234. where <em class="replaceable"><code>y</code></em> must be nonzero.
  235. In all cases the result is two values <em class="replaceable"><code>q</code></em> (an integer) and <em class="replaceable"><code>r</code></em> (a real)
  236. that satisfy the equations:
  237. </p>
  238. <pre class="screen"><em class="replaceable"><code>x</code></em> = <em class="replaceable"><code>q</code></em> * <em class="replaceable"><code>y</code></em> + <em class="replaceable"><code>r</code></em>
  239. <em class="replaceable"><code>q</code></em> = <em class="replaceable"><code>rounding-op</code></em>(<em class="replaceable"><code>x</code></em>/<em class="replaceable"><code>y</code></em>)
  240. </pre>
  241. <p>The result is inexact if either argument is inexact.
  242. </p>
  243. <p>For <code class="literal">floor/</code> the <em class="replaceable"><code>rounding-op</code></em> is the <code class="literal">floor</code> function (below).
  244. </p>
  245. <pre class="screen">(floor/ 123 10) ⇒ 12 3
  246. (floor/ 123 -10) ⇒ -13 -7
  247. (floor/ -123 10) ⇒ -13 7
  248. (floor/ -123 -10) ⇒ 12 -3
  249. </pre>
  250. <p>For <code class="literal">truncate/</code> the <em class="replaceable"><code>rounding-op</code></em> is the <code class="literal">truncate</code> function.
  251. </p>
  252. <pre class="screen">(truncate/ 123 10) ⇒ 12 3
  253. (truncate/ 123 -10) ⇒ -12 3
  254. (truncate/ -123 10) ⇒ -12 -3
  255. (truncate/ -123 -10) ⇒ 12 -3
  256. </pre>
  257. <p>For <code class="literal">div-and-mod</code> the <em class="replaceable"><code>rounding-op</code></em> is either <code class="literal">floor</code>
  258. (if <em class="replaceable"><code>y</code></em> is positive) or <code class="literal">ceiling</code> (if <em class="replaceable"><code>y</code></em> is negative).
  259. We have:
  260. </p>
  261. <pre class="screen">0 &lt;= <em class="replaceable"><code>r</code></em> &lt; |<em class="replaceable"><code>y</code></em>|
  262. </pre>
  263. <pre class="screen">(div-and-mod 123 10) ⇒ 12 3
  264. (div-and-mod 123 -10) ⇒ -12 3
  265. (div-and-mod -123 10) ⇒ -13 7
  266. (div-and-mod -123 -10) ⇒ 13 7
  267. </pre>
  268. <p>For <code class="literal">div0-and-mod0</code> the <em class="replaceable"><code>rounding-op</code></em> is the <code class="literal">round</code> function,
  269. and <code class="literal">r</code> lies within a half–open interval centered on zero.
  270. </p>
  271. <pre class="screen">-|<em class="replaceable"><code>y</code></em>/2| &lt;= <em class="replaceable"><code>r</code></em> &lt; |<em class="replaceable"><code>y</code></em>/2|
  272. </pre>
  273. <pre class="screen">(div0-and-mod0 123 10) ⇒ 12 3
  274. (div0-and-mod0 123 -10) ⇒ -12 3
  275. (div0-and-mod0 -123 10) ⇒ -12 -3
  276. (div0-and-mod0 -123 -10) ⇒ 12 -3
  277. (div0-and-mod0 127 10) ⇒ 13 -3
  278. (div0-and-mod0 127 -10) ⇒ -13 -3
  279. (div0-and-mod0 -127 10) ⇒ -13 3
  280. (div0-and-mod0 -127 -10) ⇒ 13 3
  281. </pre>
  282. <p>The inconsistent naming is for historical reasons: <code class="literal">div-and-mod</code>
  283. and <code class="literal">div0-and-mod0</code> are from R6RS, while <code class="literal">floor/</code> and
  284. <code class="literal">truncate/</code> are from R7RS.
  285. </p>
  286. </blockquote>
  287. </div>
  288. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876995616" class="indexterm"/> <code class="function">floor-quotient</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  289. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876992432" class="indexterm"/> <code class="function">truncate-quotient</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  290. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876989248" class="indexterm"/> <code class="function">div</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  291. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876986128" class="indexterm"/> <code class="function">div0</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  292. <div class="blockquote">
  293. <blockquote class="blockquote">
  294. <p>These procedures return the quotient part (first value)
  295. of respectively <code class="literal">floor/</code>, <code class="literal">truncate/</code>,
  296. <code class="literal">div-and-mod</code>, and <code class="literal">div0-and-mod0</code>.
  297. </p>
  298. </blockquote>
  299. </div>
  300. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876980640" class="indexterm"/> <code class="function">floor-remainder</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  301. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876977456" class="indexterm"/> <code class="function">truncate-remainder</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  302. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876974272" class="indexterm"/> <code class="function">mod</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  303. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876971152" class="indexterm"/> <code class="function">mod0</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  304. <div class="blockquote">
  305. <blockquote class="blockquote">
  306. <p>These procedures return the remainder part (second value)
  307. of respectively <code class="literal">floor/</code>, <code class="literal">truncate/</code>,
  308. <code class="literal">div-and-mod</code>, and <code class="literal">div0-and-mod0</code>.
  309. </p>
  310. <p>As a Kawa extension <em class="replaceable"><code>y</code></em> may be zero, in which case the result is <em class="replaceable"><code>x</code></em>:
  311. </p>
  312. <pre class="screen">(mod 123 0) ⇒ 123 ;; Kawa extension
  313. </pre>
  314. </blockquote>
  315. </div>
  316. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876964016" class="indexterm"/> <code class="function">quotient</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  317. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876960832" class="indexterm"/> <code class="function">remainder</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  318. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876957648" class="indexterm"/> <code class="function">modulo</code> <em class="replaceable"><code>x</code></em> <em class="replaceable"><code>y</code></em></p>
  319. <div class="blockquote">
  320. <blockquote class="blockquote">
  321. <p>These are equivalent to <code class="literal">truncate-quotient</code>,
  322. <code class="literal">truncate-remainder</code>, and <code class="literal">floor-remainder</code>, respectively.
  323. These are provided for backward compatibility.
  324. </p>
  325. <pre class="screen">(remainder 13 4) ⇒ 1
  326. (remainder -13 4) ⇒ -1
  327. (remainder 13 -4) ⇒ 1
  328. (remainder -13 -4) ⇒ -1
  329. (remainder -13 -4.0) ⇒ -1.0
  330. (modulo 13 4) ⇒ 1
  331. (modulo -13 4) ⇒ 3
  332. (modulo 13 -4) ⇒ -4
  333. (modulo -13 -4) ⇒ -1
  334. </pre>
  335. </blockquote>
  336. </div>
  337. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876951792" class="indexterm"/> <code class="function">abs</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em></p>
  338. <div class="blockquote">
  339. <blockquote class="blockquote">
  340. <p>Returns the absolute value of its argument.
  341. </p>
  342. <pre class="screen">(abs -7) ⇒ 7
  343. (abs -inf.0) ⇒ +inf.0
  344. </pre>
  345. </blockquote>
  346. </div>
  347. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876947792" class="indexterm"/> <code class="function">gcd</code> <em class="replaceable"><code><em class="replaceable"><code>n</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code>…</code></em></p>
  348. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876944128" class="indexterm"/> <code class="function">lcm</code> <em class="replaceable"><code><em class="replaceable"><code>n</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code>…</code></em></p>
  349. <div class="blockquote">
  350. <blockquote class="blockquote">
  351. <p>These procedures return the greatest common divisor or least common
  352. multiple of their arguments. The result is always non–negative.
  353. The arguments must be integers; if an argument is inexact, so is the result.
  354. </p>
  355. <pre class="screen">(gcd 32 -36) ⇒ 4
  356. (gcd) ⇒ 0
  357. (lcm 32 -36) ⇒ 288
  358. (lcm 32.0 -36) ⇒ 288.0 ; inexact
  359. (lcm) ⇒ 1
  360. </pre>
  361. </blockquote>
  362. </div>
  363. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876938896" class="indexterm"/> <code class="function">numerator</code> <em class="replaceable"><code><em class="replaceable"><code>q</code></em></code></em></p>
  364. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876935968" class="indexterm"/> <code class="function">denominator</code> <em class="replaceable"><code><em class="replaceable"><code>q</code></em></code></em></p>
  365. <div class="blockquote">
  366. <blockquote class="blockquote">
  367. <p>These procedures return the numerator or denominator of their argument;
  368. the result is computed as if the argument was represented as a fraction
  369. in lowest terms. The denominator is always positive. The denominator
  370. of <code class="literal">0</code> is defined to be <code class="literal">1</code>.
  371. The arguments must be integers; if an argument is inexact, so is the result.
  372. </p>
  373. <pre class="screen">(numerator (/ 6 4)) ⇒ 3
  374. (denominator (/ 6 4)) ⇒ 2
  375. (denominator (inexact (/ 6 4))) ⇒ 2.0
  376. </pre>
  377. </blockquote>
  378. </div>
  379. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876930832" class="indexterm"/> <code class="function">floor</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em></p>
  380. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876927904" class="indexterm"/> <code class="function">ceiling</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em></p>
  381. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876924976" class="indexterm"/> <code class="function">truncate</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em></p>
  382. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876922048" class="indexterm"/> <code class="function">round</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em></p>
  383. <div class="blockquote">
  384. <blockquote class="blockquote">
  385. <p>These procedures return inexact integer objects for inexact arguments
  386. that are not infinities or NaNs, and exact integer objects for exact
  387. rational arguments.
  388. </p>
  389. <div class="variablelist" epub:type="list">
  390. <dl class="variablelist">
  391. <dt class="term"><code class="literal">floor</code>
  392. </dt>
  393. <dd>
  394. <p>Returns the largest integer object not larger than <em class="replaceable"><code>x</code></em>.
  395. </p>
  396. </dd>
  397. <dt class="term"><code class="literal">ceiling</code>
  398. </dt>
  399. <dd>
  400. <p>Returns the smallest integer object not smaller than <em class="replaceable"><code>x</code></em>.
  401. </p>
  402. </dd>
  403. <dt class="term"><code class="literal">truncate</code>
  404. </dt>
  405. <dd>
  406. <p>Returns the integer object closest to <em class="replaceable"><code>x</code></em> whose absolute value is
  407. not larger than the absolute value of <em class="replaceable"><code>x</code></em>.
  408. </p>
  409. </dd>
  410. <dt class="term"><code class="literal">round</code>
  411. </dt>
  412. <dd>
  413. <p>Returns the closest integer object to <em class="replaceable"><code>x</code></em>, rounding to even when
  414. <em class="replaceable"><code>x</code></em> represents a number halfway between two integers.
  415. </p>
  416. </dd>
  417. </dl>
  418. </div>
  419. <p>If the argument to one of these procedures is inexact, then the result
  420. is also inexact. If an exact value is needed, the result should be
  421. passed to the <code class="literal">exact</code> procedure.
  422. </p>
  423. <p>Although infinities and NaNs are not integer objects, these procedures
  424. return an infinity when given an infinity as an argument, and a NaN when
  425. given a NaN.
  426. </p>
  427. <pre class="screen">(floor -4.3) ⇒ -5.0
  428. (ceiling -4.3) ⇒ -4.0
  429. (truncate -4.3) ⇒ -4.0
  430. (round -4.3) ⇒ -4.0
  431. (floor 3.5) ⇒ 3.0
  432. (ceiling 3.5) ⇒ 4.0
  433. (truncate 3.5) ⇒ 3.0
  434. (round 3.5) ⇒ 4.0
  435. (round 7/2) ⇒ 4
  436. (round 7) ⇒ 7
  437. (floor +inf.0) ⇒ +inf.0
  438. (ceiling -inf.0) ⇒ -inf.0
  439. (round +nan.0) ⇒ +nan.0
  440. </pre>
  441. </blockquote>
  442. </div>
  443. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876907856" class="indexterm"/> <code class="function">rationalize</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em><em class="replaceable"><code><sub>2</sub></code></em></p>
  444. <div class="blockquote">
  445. <blockquote class="blockquote">
  446. <p>The <code class="literal">rationalize</code> procedure returns a number object representing
  447. the <span class="emphasis"><em>simplest</em></span> rational number differing from <em class="replaceable"><code>x</code></em><sub>1</sub> by no more
  448. than <em class="replaceable"><code>x</code></em><sub>2</sub>.
  449. </p>
  450. <p>A rational number <span class="emphasis"><em>r_1</em></span> is <span class="emphasis"><em>simpler</em></span> than another rational
  451. number <span class="emphasis"><em>r_2</em></span> if <code class="literal">r_1 = p_1/q_1</code> and <code class="literal">r_2 = p_2/q_2</code> (in
  452. lowest terms) and <code class="literal">|p_1| &lt;= |p_2|</code> and <code class="literal">|q_1| &lt;= |q_2|</code>. Thus
  453. <code class="literal">3/5</code> is simpler than <code class="literal">4/7</code>.
  454. </p>
  455. <p>Although not all rationals are comparable in this ordering (consider
  456. <code class="literal">2/7</code> and <code class="literal">3/5</code>) any interval contains a rational number that
  457. is simpler than every other rational number in that interval (the
  458. simpler <code class="literal">2/5</code> lies between <code class="literal">2/7</code> and <code class="literal">3/5</code>).
  459. </p>
  460. <p>Note that <code class="literal">0 = 0/1</code> is the simplest rational of all.
  461. </p>
  462. <pre class="screen">(rationalize (exact .3) 1/10) ⇒ 1/3
  463. (rationalize .3 1/10) ⇒ #i1/3 ; approximately
  464. (rationalize +inf.0 3) ⇒ +inf.0
  465. (rationalize +inf.0 +inf.0) ⇒ +nan.0
  466. </pre>
  467. <p>The first two examples hold only in implementations whose inexact real
  468. number objects have sufficient precision.
  469. </p>
  470. </blockquote>
  471. </div>
  472. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876891376" class="indexterm"/> <code class="function">exp</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  473. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876888512" class="indexterm"/> <code class="function">log</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  474. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876885648" class="indexterm"/> <code class="function">log</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em><em class="replaceable"><code><sub>2</sub></code></em></p>
  475. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876881504" class="indexterm"/> <code class="function">sin</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  476. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876878592" class="indexterm"/> <code class="function">cos</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  477. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876875728" class="indexterm"/> <code class="function">tan</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  478. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876872816" class="indexterm"/> <code class="function">asin</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  479. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876869888" class="indexterm"/> <code class="function">acos</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  480. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876866960" class="indexterm"/> <code class="function">atan</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  481. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876864032" class="indexterm"/> <code class="function">atan</code> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em><em class="replaceable"><code><sub>1</sub></code></em> <em class="replaceable"><code><em class="replaceable"><code>x</code></em></code></em><em class="replaceable"><code><sub>2</sub></code></em></p>
  482. <div class="blockquote">
  483. <blockquote class="blockquote">
  484. <p>These procedures compute the usual transcendental functions.
  485. </p>
  486. <p>The <code class="literal">exp</code> procedure computes the base–<em class="replaceable"><code>e</code></em> exponential of
  487. <em class="replaceable"><code>z</code></em>.
  488. The <code class="literal">log</code> procedure with a single argument computes the natural
  489. logarithm of <em class="replaceable"><code>z</code></em> (<span class="bold"><strong>not</strong></span> the base–10 logarithm); <code class="literal">(log
  490. <em class="replaceable"><code>z</code></em><sub>1</sub> <em class="replaceable"><code>z</code></em><sub>2</sub>)</code> computes the base–<em class="replaceable"><code>z</code></em><sub>2</sub> logarithm of <em class="replaceable"><code>z</code></em><sub>1</sub>.
  491. </p>
  492. <p>The <code class="literal">asin</code>, <code class="literal">acos</code>, and <code class="literal">atan</code> procedures compute
  493. arcsine, arccosine, and arctangent, respectively. The two–argument
  494. variant of <code class="literal">atan</code> computes:
  495. </p>
  496. <pre class="screen">(angle (make-rectangular <em class="replaceable"><code>x</code></em><sub>2</sub> <em class="replaceable"><code>x</code></em><sub>1</sub>))
  497. </pre>
  498. <p>These procedures may return inexact results even when given exact
  499. arguments.
  500. </p>
  501. <pre class="screen">(exp +inf.0) ⇒ +inf.0
  502. (exp -inf.0) ⇒ 0.0
  503. (log +inf.0) ⇒ +inf.0
  504. (log 0.0) ⇒ -inf.0
  505. (log 0) ⇒ exception &amp;assertion
  506. (log -inf.0) ⇒ +inf.0+3.141592653589793i ; approximately
  507. (atan -inf.0) ⇒ -1.5707963267948965 ; approximately
  508. (atan +inf.0) ⇒ 1.5707963267948965 ; approximately
  509. (log -1.0+0.0i) ⇒ 0.0+3.141592653589793i ; approximately
  510. (log -1.0-0.0i) ⇒ 0.0-3.141592653589793i ; approximately
  511. ; if -0.0 is distinguished
  512. </pre>
  513. </blockquote>
  514. </div>
  515. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876847392" class="indexterm"/> <code class="function">sinh</code> <em class="replaceable"><code>z</code></em></p>
  516. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876844592" class="indexterm"/> <code class="function">cosh</code> <em class="replaceable"><code>z</code></em></p>
  517. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876841792" class="indexterm"/> <code class="function">tanh</code> <em class="replaceable"><code>z</code></em></p>
  518. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876838992" class="indexterm"/> <code class="function">asinh</code> <em class="replaceable"><code>z</code></em></p>
  519. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876836192" class="indexterm"/> <code class="function">acosh</code> <em class="replaceable"><code>z</code></em></p>
  520. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876833392" class="indexterm"/> <code class="function">atanh</code> <em class="replaceable"><code>z</code></em></p>
  521. <div class="blockquote">
  522. <blockquote class="blockquote">
  523. <p>The hyperbolic functions.
  524. </p>
  525. </blockquote>
  526. </div>
  527. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876830032" class="indexterm"/> <code class="function">square</code> <em class="replaceable"><code>z</code></em></p>
  528. <div class="blockquote">
  529. <blockquote class="blockquote">
  530. <p>Returns the square of <em class="replaceable"><code>z</code></em>.
  531. This is equivalent to <code class="literal">(* <em class="replaceable"><code>z</code></em> <em class="replaceable"><code>z</code></em>)</code>.
  532. </p>
  533. <pre class="screen">(square 42) ⇒ 1764
  534. (square 2.0) ⇒ 4.0
  535. </pre>
  536. </blockquote>
  537. </div>
  538. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876824672" class="indexterm"/> <code class="function">sqrt</code> <em class="replaceable"><code><em class="replaceable"><code>z</code></em></code></em></p>
  539. <div class="blockquote">
  540. <blockquote class="blockquote">
  541. <p>Returns the principal square root of <em class="replaceable"><code>z</code></em>. For rational <em class="replaceable"><code>z</code></em>, the
  542. result has either positive real part, or zero real part and
  543. non–negative imaginary part. The value of <code class="literal">(sqrt <em class="replaceable"><code>z</code></em>)</code> could be
  544. expressed as:
  545. </p>
  546. <pre class="screen">e^((log z)/2)
  547. </pre>
  548. <p>The <code class="literal">sqrt</code> procedure may return an inexact result even when given
  549. an exact argument.
  550. </p>
  551. <pre class="screen">(sqrt -5) ⇒ 0.0+2.23606797749979i ; approximately
  552. (sqrt +inf.0) ⇒ +inf.0
  553. (sqrt -inf.0) ⇒ +inf.0i
  554. </pre>
  555. <p>Note that if the argument is a primitive number (such as <code class="literal">double</code>) or an
  556. instance of the corresponding boxed class (such as <code class="literal">java.lang.Double</code>)
  557. then we use the real-number version of <code class="literal">sqrt</code>:
  558. </p>
  559. <pre class="screen">(sqrt (-&gt;double -5)) ⇒ NaN
  560. </pre>
  561. <p>That is, we get different a result for <code class="literal">java.lang.Double</code>
  562. and <code class="literal">gnu.math.DFloNum</code>, even for arguments that are numerically equal
  563. in the sense of <code class="literal">=</code>.
  564. This is so that the compiler can use the <code class="literal">java.lang.Math.sqrt</code>
  565. method without object allocation when the argument is a <code class="literal">double</code>
  566. (and because we want <code class="literal">double</code> and <code class="literal">java.lang.Double</code> to behave
  567. consistently).
  568. </p>
  569. </blockquote>
  570. </div>
  571. <p class="synopsis" kind="Procedure"><span class="kind">Procedure</span><span class="ignore">: </span><a id="idm139667876811680" class="indexterm"/> <code class="function">exact-integer-sqrt</code> <em class="replaceable"><code><em class="replaceable"><code>k</code></em></code></em></p>
  572. <div class="blockquote">
  573. <blockquote class="blockquote">
  574. <p>The <code class="literal">exact-integer-sqrt</code> procedure returns two non–negative exact
  575. integer objects <span class="emphasis"><em>s</em></span> and <span class="emphasis"><em>r</em></span> where <code class="literal"><em class="replaceable"><code>k</code></em> = s^2 + r</code> and
  576. <code class="literal"><em class="replaceable"><code>k</code></em> &lt; (s+1)^2</code>.
  577. </p>
  578. <pre class="screen">(exact-integer-sqrt 4) ⇒ 2 0 ; two return values
  579. (exact-integer-sqrt 5) ⇒ 2 1 ; two return values
  580. </pre>
  581. </blockquote>
  582. </div>
  583. </section>
  584. <footer>
  585. <div class="navfooter">
  586. <p>
  587. Up: <a accesskey="u" href="Numbers.xhtml">Quantities and Numbers</a></p>
  588. <p>
  589. Previous: <a accesskey="p" href="Numerical-types.xhtml">Numerical types</a></p>
  590. <p>
  591. Next: <a accesskey="n" href="Numerical-input-and-output.xhtml">Numerical input and output</a></p>
  592. </div>
  593. </footer>
  594. </body>
  595. </html>