double
A double — that is, an IEEE 754 double-precision floating point number — is an approximation of a real number. The representation uses 64 binary digits, hereinafter bits, organized as 1 sign bit, 52 bits of mantissa, and 11 bits of exponent. The sign bit distinguishes positive (sign bit = 0) and negative (sign bit = 1) values. The mantissa encodes the significant binary digits of the number. The exponent scales the mantissa by a particular power of 2. Finite double
values range from -1.79769313486231570e+308
to 1.79769313486231570e+308
. The closest to zero nonzero double
values are ±4.94065645841246544e-324
. Positive zero (0.0
) and negative zero (-0.0
) are considered distinct. Infinities are supported, but indicate an overflow of representational limits (rather than ±∞
). Some encodings do not represent real values; such a value is a not-a-number (NaN). No two differing NaN
encodings are considered equal. This is a departure from a strict interpretation of IEEE 754.
In Avail, a literal double comprises one or more decimal digits, then a full stop .
(U+002E)
and fractional part, and then optional exponential notation — an E
(U+0045)
or e
(U+0065)
followed by one or more decimal digits. Examples include 1.0
, 0.1
, 0.0025
, 2.5E-3
, 2500.0
, 2.5E3
, and 3.141592653589793
. Literal doubles are defined by the macros "…#.…#«f»?"
, "…#.…#…"
, and "…#.…#e|E«+|-»!…#«f»?"
.
Though double
numerically subsumes float
, they are considered siblings because their values differ by internal representation. double
is not a supertype of float
. No float
value is also a double
value, and no double
value is also a float
value.
‹ number |
| | Return to Type System | | | float › |