Rule of Float Substitutability (ANSI and GNU Common Lisp Document)

Previous: Rule of Canonical Representation for Rationals, Up: Rational Computations

#### 12.1.3.3 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

Previous: Rule of Canonical Representation for Rationals, Up: Rational Computations