A float
is a mathematical rational (but not a Common Lisp rational)
of the form
s\cdot f\cdot b^e-p,
where s is +1 or -1, the sign;
b is an integer
greater than~1, the base or radix of the representation;
p is a positive integer,
the precision (in base-b digits) of the float;
f is a positive integer
between b^p-1 and
b^p-1 (inclusive), the significand;
and e is an integer, the exponent.
The value of p and the range of~e
depends on the implementation and on the type of float
within that implementation. In addition, there is a floating-point zero;
depending on the implementation, there can also be a "minus zero". If there
is no minus zero, then 0.0 and~-0.0 are both interpreted as simply a
floating-point zero.
(= 0.0 -0.0)
is always true.
If there is a minus zero, (eql -0.0 0.0)
is false,
otherwise it is true.
[Reviewer Note by Barmar: What about IEEE NaNs and infinities?]
[Reviewer Note by RWK: In the following, what is the "ordering"? precision? range? Can there be additional subtypes of float or does "others" in the list of four?]
The types short-float, single-float, double-float, and long-float are subtypes of type float. Any two of them must be either disjoint types or the same type; if the same type, then any other types between them in the above ordering must also be the same type. For example, if the type single-float and the type long-float are the same type, then the type double-float must be the same type also.
Abbreviating.
(float
{[
lower-limit [upper-limit]]
})
lower-limit, upper-limit | interval designators for type float. The defaults for each of lower-limit and upper-limit is the symbol *. |
This denotes the floats on the interval described by lower-limit and upper-limit.
Figure~2–9, Constructing Numbers from Tokens, Printing Floats
Note that all mathematical integers are representable not only as
Common Lisp reals, but also as complex floats. For example,
possible representations of the mathematical number 1
include the integer 1
,
the float 1.0
,
or the complex #C(1.0 0.0)
.