Common Lisp the Language, 2nd Edition
Common Lisp provides no data type that can accurately represent irrational numerical values. The functions in this section are described as if the results were mathematically accurate, but actually they all produce floating-point approximations to the true mathematical result in the general case. In some places mathematical identities are set forth that are intended to elucidate the meanings of the functions; however, two mathematically identical expressions may be computationally different because of errors inherent in the floating-point approximation process.
When the arguments to a function in this section 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 result of type rational or a single-precision floating-point approximation. If the arguments are all rational but the result cannot be expressed as a rational number, then a single-precision floating-point approximation is always returned.
X3J13 voted in March 1989
(COMPLEX-RATIONAL-RESULT)
to clarify that the provisions of the previous paragraph apply to complex
numbers. If the arguments to a 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-precision floating-point approximation
of type 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 number, 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).
The rules of floating-point contagion and complex contagion are effectively obeyed by all the functions in this section except expt, which treats some cases of rational exponents specially. When, possibly after contagious conversion, all of the arguments are of the same floating-point or complex floating-point type, then the result will be of that same type unless otherwise noted.