## double

/avail/Avail/Foundation/Bootstrap/Special Objects: double
Source: /avail/Avail/Foundation/Bootstrap/Special Objects
Categories: Primitives, Types, Numbers
Supertypes: number
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 ({@code 0.0 }) and negative zero ({@code -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 ({@code 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 begins with one or more decimal digits, contains a full stop `.` (U+002E) and fractional part, and optionally ends with exponential notation — an `E` (U+0045) or `e` (U+0065) followed by one or more decimal digits.

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.