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:

- infinity
- ‘
`1.0e+INF`’ and ‘`-1.0e+INF`’ - not-a-number
- ‘
`0.0e+NaN`’ and ‘`-0.0e+NaN`’

The following functions are specialized for handling floating-point numbers:

— Function: **isnan**` x`

This predicate returns

`t`

if its floating-point argument is a NaN,`nil`

otherwise.

— Function: **frexp**` x`

This function returns a cons cell

`(`

s`.`

e`)`

, wheresandeare respectively the significand and exponent of the floating-point numberx.If

xis finite, thensis a floating-point number between 0.5 (inclusive) and 1.0 (exclusive),eis an integer, andx=s* 2**e. Ifxis zero or infinity, thensis the same asx. Ifxis a NaN, thensis also a NaN. Ifxis zero, theneis 0.

— Function: **ldexp**` sig &optional exp`

This function returns a floating-point number corresponding to the significand

sigand exponentexp.