Next: Predicates on Numbers, Previous: Integer Basics, Up: Numbers
Floating-point numbers are useful for representing numbers that are
not integral. The range of floating-point numbers is
the same as the range of the C data type double
on the machine
you are using. On all computers currently supported by Emacs, this is
double-precision IEEE floating point.
The read syntax for floating-point numbers requires either a decimal point, an exponent, or both. Optional signs (‘+’ or ‘-’) precede the number and its exponent. For example, ‘1500.0’, ‘+15e2’, ‘15.0e+2’, ‘+1500000e-3’, and ‘.15e4’ are five ways of writing a floating-point number whose value is 1500. They are all equivalent. Like Common Lisp, Emacs Lisp requires at least one digit after any decimal point in a floating-point number; ‘1500.’ is an integer, not a floating-point number.
Emacs Lisp treats -0.0
as numerically equal to ordinary zero
with respect to equal
and =
. This follows the
IEEE floating-point standard, which says -0.0
and
0.0
are numerically equal even though other operations can
distinguish them.
The IEEE floating-point standard supports positive
infinity and negative infinity as floating-point values. It also
provides for a class of values called NaN, or “not a number”;
numerical functions return such values in cases where there is no
correct answer. For example, (/ 0.0 0.0)
returns a NaN.
Although NaN values carry a sign, for practical purposes there is no other
significant difference between different NaN values in Emacs Lisp.
Here are read syntaxes for these special floating-point values:
The following functions are specialized for handling floating-point numbers:
This predicate returns
t
if its floating-point argument is a NaN,nil
otherwise.
This function returns a cons cell
(
s.
e)
, where s and e are respectively the significand and exponent of the floating-point number x.If x is finite, then s is a floating-point number between 0.5 (inclusive) and 1.0 (exclusive), e is an integer, and x = s * 2**e. If x is zero or infinity, then s is the same as x. If x is a NaN, then s is also a NaN. If x is zero, then e is 0.
Given a numeric significand s and an integer exponent e, this function returns the floating point number s * 2**e.