7 Additional Extensions to Common Lisp
float
are the floating-point numbers. Common Lisp provides four subtypes offloat
:short-float
, single-float
,double-float
, andlong-float
. These subtypes need not be distinct. If an implementation of Common Lisp uses only one internal floating-point format, that format is designated as single-float by convention, and any number that is of type float
is also of type single-float
,short-float
,double-float
, andlong-float
. In Liquid Common Lisp, only one internal format is used. This format is in accordance with the IEEE standard for the representation of 64-bit double-precision floating-point numbers. It includes a sign bit, a 52-bit unsigned mantissa with a hidden bit, and an 11-bit unsigned exponent. The hidden bit in the mantissa is a high-order 1 that is appended to the 52-bit field for normalized floating-point numbers.The exponent is excess-1023; that is, the representation of the exponent is an 11-bit nonnegative integer whose value is 1023 greater than the true exponent value.
Floating-point numbers are represented in radix 2. Negative floating-point numbers use a signed-magnitude representation; that is, there is a distinct negative zero such that the expression(eql -0.0 0.0)
returnsnil
. The rounding mode is round-to-nearest.
In general, when an operation involves both a rational and a floating-point argument, the rational number is first converted to floating-point format, and then the operation is performed. This conversion process is called floating-point contagion. However, for numerical equality comparisons, the arguments are compared using rational arithmetic to ensure transitivity of the equality (or inequality) relation.
You can make arrays of floating-point numbers that use a packed 32-bit format by specifying the typesingle-float
as the argument to the keyword :element-type
of the Common Lisp functionmake-array
. These arrays occupy half of the space required by the default floating-point arrays. Access to elements of single-float arrays causes an automatic conversion from single-float to double-float format. This conversion generally has no adverse performance effects.
Note: The type specifier(array single-float dimension)
is not equivalent to the type specifier(array double-float dimension)
. By default, specifying(array float dimension)
is the same as specifying (array double-float dimension)
; that is, the elements of the array are double-float quantities. The formats used in floating-point arrays are compatible with C floating-point arrays of the same type.
Generated with Harlequin WebMaker