倍精度
浮動小数点数(double-precision floating-point number)は、コンピュータで実数を表現するための形式の一つで、
64[[ビット]]を使用します。これは、
32[[ビット]]を使用する単精度
浮動小数点数よりも高い精度で数値を表せるため、より精密な計算が必要な場面で利用されます。
倍精度の歴史的背景
かつてのプログラミング言語FORTRANでは、単精度(REAL型)よりも精度が高いものを倍精度(DOUBLE PRECISION型)と呼んでいました。当時のコンピュータは、
ワード長や
浮動小数点数の形式が機種ごとに異なっていましたが、IBM社のSystem/360が採用した浮動小数点形式が事実上の標準となり、
32[[ビット]]単精度では精度が不足する科学技術計算分野で倍精度が活用されるようになりました。FORTRANでは、単精度が1
ワード、倍精度が2
ワードを占めるという前提がありました。
IEEE 754規格の制定以降、内部2進で
32[[ビット]]を単精度、
64[[ビット]]を倍精度とする呼び方が一般的になりました。
単精度と倍精度の違い
一般的に、システムで実数を表現する際に基本となる1語で表現される数値を単精度、2語で表現される数値を倍精度と呼びます。語長はシステムによって異なり、
32[[ビット]]、36
ビット、48
ビット、
64[[ビット]]などがありました。しかし、
IEEE 754規格が制定されてからは、
32[[ビット]]を単精度、
64[[ビット]]を倍精度とする考え方が広まりました。
IEEE 754規格では、単精度は
32[[ビット]](4オクテット)、倍精度は
64[[ビット]](8オクテット)で定義されています。倍精度は、単に精度が2倍というわけではなく、全体的な長さが2倍になっていることに由来します。
倍精度
浮動小数点数は、以下の要素で構成されます。
符号ビット (sign): 1ビットで、数値の正負を表します。
指数部 (exponent): 11
ビットで、数値の大きさを表します。
仮数部 (fraction): 52ビットで、数値の精度を表します。
指数部が0の場合を除き、仮数部の最上位ビットには暗黙の1があるとみなすことで、実質的に53ビットの精度が得られます。これは、十進数で約16桁に相当します。
64[[ビット]]の倍精度データで表される数値は、以下の式で計算できます。
value = (-1)^sign (1 + Σ(b_-i
2^-i)) 2^(e - 1023)
ここで、
sign は符号ビット
b_-i は仮数部の各
ビット
e はバイアスされた指数部(指数部の値から1023を引いた値)
この形式では、2^52 から 2^53 の範囲では正確に整数を表現できます。また、2^53 から 2^54 の範囲では偶数しか表現できません。
指数部の符号化
指数部は、バイアス値(1023)を加えて符号化されます。指数部の値が0の場合は0か非正規化数を、2047の場合は無限大かNaN(非数)を表します。
例えば、16進数で 3FD5 5555 5555 5555 は、倍精度浮動小数点数として特定の数値を表します。
MSX-BASICにおける浮動小数点数
MSX-BASICでは、IEEE 754とは異なる独自の8バイト形式で実数を表現していました。ここでは、符号1ビット、指数部7ビット、仮数部56ビットで構成され、指数部をバイナリ、仮数部をBCDで表現していました。これにより、10進数で正確に14桁の有効数字と±63乗の指数を扱えましたが、演算処理の負荷が増えるという特徴がありました。これは、10進数の誤差をなくすための工夫ですが、2進数での演算と比較して処理が重くなるというトレードオフがありました。
まとめ
倍精度浮動小数点数は、単精度よりも高い精度で実数を表現できるため、科学技術計算など正確な計算が求められる分野で広く利用されています。IEEE 754規格によって標準化され、現代のコンピュータシステムにおける数値計算の基礎となっています。
関連項目
IEEE 754
*
浮動小数点数