In computing, octuple precision is a binary floating-point-based computer number format that occupies 32 bytes (256 bits) in computer memory. This 256-bit octuple precision is for applications requiring results in higher than quadruple precision.
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.
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: ).
The bits are laid out as follows:
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.
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 00000<sub>16</sub> and 7FFFF<sub>16</sub> are interpreted specially.
The minimum strictly positive (subnormal) value is and has a precision of only one bit. The minimum positive normal value is 2<sup>âÂÂ262142</sup> â 2.4824 à10<sup>âÂÂ78913</sup>. The maximum representable value is 2<sup>262144</sup> â 2<sup>261907</sup> â 1.6113 à10<sup>78913</sup>.
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>16</sub> = +0 8000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub>16</sub> = âÂÂ0
7fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub>16</sub> = +infinity ffff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub>16</sub> = âÂÂinfinity
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001<sub>16</sub> = 2<sup>âÂÂ262142</sup> à2<sup>âÂÂ236</sup> = 2<sup>âÂÂ262378</sup> â 2.24800708647703657297018614776265182597360918266100276294348974547709294462 à10<sup>âÂÂ78984</sup> (smallest positive subnormal number)
0000 0fff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub>16</sub> = 2<sup>âÂÂ262142</sup> à(1 â 2<sup>âÂÂ236</sup>) â 2.4824279514643497882993282229138717236776877060796468692709532979137875392 à10<sup>âÂÂ78913</sup> (largest subnormal number)
0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000<sub>16</sub> = 2<sup>âÂÂ262142</sup> â 2.48242795146434978829932822291387172367768770607964686927095329791378756168 à10<sup>âÂÂ78913</sup> (smallest positive normal number)
7fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub>16</sub> = 2<sup>262143</sup> à(2 â 2<sup>âÂÂ236</sup>) â 1.61132571748576047361957211845200501064402387454966951747637125049607182699 à10<sup>78913</sup> (largest normal number)
3fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff<sub>16</sub> = 1 â 2<sup>âÂÂ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>16</sub> = 1 (one)
3fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001<sub>16</sub> = 1 + 2<sup>âÂÂ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 <code>0101...</code> which is less than 1/2 of a unit in the last place.
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.
There is no known hardware with native support for octuple precision.