コンピュータにおいて、8倍精度とは、コンピュータメモリ上で32バイト(256ビット)を占める、バイナリ浮動小数点に基づく数値形式です。この256ビットの8倍精度は、 4倍精度よりも高い精度の結果を必要とするアプリケーションで使用されます。
この範囲は、プランク長まで正確に観測可能な宇宙の大きさを記述するために必要な範囲をはるかに超えています。しかし、実験数学におけるいくつかの問題では、8倍(またはそれ以上)の精度が必要になります。[ 1 ]
2008年の改訂版において、IEEE 754規格は、交換フォーマットの一つとして(基本フォーマットではないが)バイナリ256フォーマットを規定しており、その特徴は以下のとおりである。
指数がすべてゼロでない限り、形式は暗黙的に値 1 の先頭ビットを使用して書き込まれます。したがって、メモリ形式には仮数の 236 ビットのみが表示されますが、全体の精度は 237 ビット (約 71 桁の 10 進数: log 10 (2 237 ) ≈ 71.344 ) です。
各要素の配置は以下のとおりです。
![]()
8倍精度バイナリ浮動小数点指数は、オフセットバイナリ表現を使用してエンコードされ、ゼロオフセットは262143です。これは、IEEE 754規格では指数バイアスとも呼ばれます。
したがって、オフセットバイナリ表現で定義されているように、真の指数を取得するには、格納されている指数からオフセット262143を減算する必要があります。
格納されている指数00000 16と7FFFF 16は特別に解釈されます。
最小の厳密に正の値(サブノーマル)は2 −262378 ≈ 10 −78984で、精度は 1 ビットのみです。最小の正のノーマル値は 2 −262142 ≈ 2.4824 × 10 −78913です。表現可能な最大値は 2 262144 − 2 261907 ≈ 1.6113 × 10 78913です。
これらの例は、浮動小数点値をビット表現(16進数)で示したものです。これには、符号、(バイアス付き)指数部、および仮数部が含まれます。
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = +0 8000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = −0
7fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = +無限大 ffff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = −無限大
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 16 = 2 −262142 × 2 −236 = 2 −262378 ≈ 2.24800708647703657297018614776265182597360918266100276294348974547709294462 × 10 −78984 (最小の正のサブノーマル数)
0000 0fff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff 16 = 2 −262142 × (1 − 2 −236 ) ≈ 2.4824279514643497882993282229138717236776877060796468692709532979137875392 × 10 −78913 (最大の異常値)
0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = 2 −262142 ≈ 2.48242795146434978829932822291387172367768770607964686927095329791378756168 × 10 −78913 (最小の正の正規数)
7fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff 16 = 2 262143 × (2 − 2 −236 ) ≈ 1.61132571748576047361957211845200501064402387454966951747637125049607182699 × 10 78913 (最大の通常の数)
3fff efff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff 16 = 1 − 2 −237 ≈ 0.999999999999999999999999999999999999999999999999999999999999999999999999999995472 (1未満の最大の数)
3fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 16 = 1 (1)
3fff f000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 16 = 1 + 2 −236 ≈ 1.00000000000000000000000000000000000000000000000000000000000000000000000000906 (1より大きい最小の数)
デフォルトでは、仮数のビット数が奇数であるため、1/3 は倍精度のように切り捨てられます。そのため、丸めポイントより後のビットは、最後の桁で0101...1/2 未満になります。
8倍精度は、使用頻度が非常に低いため、実装されることはほとんどありません。Apple Inc. は、224 ビットの 2 の補数表現の仮数部と 32 ビットの指数部を持つ 8 倍精度数の加算、減算、乗算を実装していました。 [ 1 ]一般的な任意精度演算ライブラリを使用して8 倍精度 (またはそれ以上) を取得できますが、専用の 8 倍精度実装の方が高いパフォーマンスを実現できる場合があります。
8倍精度演算をネイティブにサポートする既知のハードウェアは存在しません。