Octuple-precision floating-point format
256-bit computer number format
- 3 min read
- 2 chapters
Related on Lably
Through Computing, Exponentiation and Significant figures
The range greatly exceeds what is needed to describe the size of the observable universe, precise to the Planck length. However, some problems in experimental mathematics do require octuple (or higher) precision.
IEEE 754 octuple-precision binary floating-point format: binary256
In its 2008 revision, the IEEE 754 standard specifies a binary256 format among the interchange formats (it is not a basic format), as having:
The format is written with an implicit lead bit with value 1 unless the exponent is all zeros. Thus only 236 bits of the significand appear in the memory format, but the total precision is 237 bits (approximately 71 decimal digits: log10(2237) ≈ 71.344).
The bits are laid out as follows:
Exponent encoding
The octuple-precision binary floating-point exponent is encoded using an offset binary representation, with the zero offset being 262143; also known as exponent bias in the IEEE 754 standard.
- Emin = −262142
- Emax = 262143
- Exponent bias = 3FFFF16 = 262143
Thus, as defined by the offset binary representation, in order to get the true exponent the offset of 262143 has to be subtracted from the stored exponent.
The stored exponents 0000016 and 7FFFF16 are interpreted specially.
The minimum strictly positive (subnormal) value is 2−262378 ≈ 10−78984 and has a precision of only one bit. The minimum positive normal value is 2−262142 ≈ 2.4824 × 10−78913. The maximum representable value is 2262144 − 2261907 ≈ 1.6113 × 1078913.
Octuple-precision examples
These examples are given in bit representation, in hexadecimal, of the floating-point value. This includes the sign, (biased) exponent, and significand.
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwcw">16</sub> = +0 8000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwdA">16</sub> = −0
7fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwdg">16</sub> = +infinity ffff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwdw">16</sub> = −infinity
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001<sub id="mweQ">16</sub> = 2<sup id="mweg">−262142</sup> × 2<sup id="mwew">−236</sup> = 2<sup id="mwfA">−262378</sup> ≈ 2.24800708647703657297018614776265182597360918266100276294348974547709294462 × 10<sup id="mwfQ">−78984</sup> (smallest positive subnormal number)
0000 0fff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub id="mwfw">16</sub> = 2<sup id="mwgA">−262142</sup> × (1 − 2<sup id="mwgQ">−236</sup>) ≈ 2.4824279514643497882993282229138717236776877060796468692709532979137875392 × 10<sup id="mwgg">−78913</sup> (largest subnormal number)
0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwhA">16</sub> = 2<sup id="mwhQ">−262142</sup> ≈ 2.48242795146434978829932822291387172367768770607964686927095329791378756168 × 10<sup id="mwhg">−78913</sup> (smallest positive normal number)
7fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub id="mwiA">16</sub> = 2<sup id="mwiQ">262143</sup> × (2 − 2<sup id="mwig">−236</sup>) ≈ 1.61132571748576047361957211845200501064402387454966951747637125049607182699 × 10<sup id="mwiw">78913</sup> (largest normal number)
3fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub id="mwjQ">16</sub> = 1 − 2<sup id="mwjg">−237</sup> ≈ 0.999999999999999999999999999999999999999999999999999999999999999999999995472 (largest number less than one)
3fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub id="mwkA">16</sub> = 1 (one)
3fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001<sub id="mwkg">16</sub> = 1 + 2<sup id="mwkw">−236</sup> ≈ 1.00000000000000000000000000000000000000000000000000000000000000000000000906 (smallest number larger than one)
By default, 1/3 rounds down like double precision, because of the odd number of bits in the significand. So the bits beyond the rounding point are 0101... which is less than 1/2 of a unit in the last place.
Sign in to keep reading
One more chapter is free with a Lably account.
Implementations
Octuple precision is rarely implemented since usage of it is extremely rare. Apple Inc. had an implementation of addition, subtraction and multiplication of octuple-precision numbers with a 224-bit two's complement significand and a 32-bit exponent. One can use general arbitrary-precision arithmetic libraries to obtain octuple (or higher) precision, but specialized octuple-precision implementations may achieve higher performance.
Hardware support
There is no known hardware with native support for octuple precision.

