CLCS

Rule of Float Substitutability

When the arguments to an irrational mathematical function

[Reviewer Note by Barmar: There should be a table of these functions.] are all rational and the true mathematical result is also (mathematically) rational, then unless otherwise noted an implementation is free to return either an accurate rational result or a single float approximation. If the arguments are all rational but the result cannot be expressed as a rational number, then a single float approximation is always returned.

If the arguments to a mathematical function are all of type (or rational (complex rational)) and the true mathematical result is (mathematically) a complex number with rational real and imaginary parts, then unless otherwise noted an implementation is free to return either an accurate result of type (or rational (complex rational)) or a single float (permissible only if the imaginary part of the true mathematical result is zero) or (complex single-float). If the arguments are all of type (or rational (complex rational)) but the result cannot be expressed as a rational or complex rational, then the returned value will be of type single-float (permissible only if the imaginary part of the true mathematical result is zero) or (complex single-float).

  Function  Sample Results                                      abs       (abs #c(3 4)) ⇒  5 or 5.0                          acos      (acos 1) ⇒  0 or 0.0                               acosh     (acosh 1) ⇒  0 or 0.0                              asin      (asin 0) ⇒  0 or 0.0                               asinh     (asinh 0) ⇒  0 or 0.0                              atan      (atan 0) ⇒  0 or 0.0                               atanh     (atanh 0) ⇒  0 or 0.0                              cis       (cis 0) ⇒  #c(1 0) or #c(1.0 0.0)                  cos       (cos 0) ⇒  1 or 1.0                                cosh      (cosh 0) ⇒  1 or 1.0                               exp       (exp 0) ⇒  1 or 1.0                                expt      (expt 8 1/3) ⇒  2 or 2.0                           log       (log 1) ⇒  0 or 0.0                                          (log 8 2) ⇒  3 or 3.0                              phase     (phase 7) ⇒  0 or 0.0                              signum    (signum #c(3 4)) ⇒  #c(3/5 4/5) or #c(0.6 0.8)     sin       (sin 0) ⇒  0 or 0.0                                sinh      (sinh 0) ⇒  0 or 0.0                               sqrt      (sqrt 4) ⇒  2 or 2.0                                         (sqrt 9/16) ⇒  3/4 or 0.75                         tan       (tan 0) ⇒  0 or 0.0                                tanh      (tanh 0) ⇒  0 or 0.0                            

Figure 12–8: Functions Affected by Rule of Float Substitutability