仕事で役立つ人気ビジネスアプリおすすめ!
[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コンピュータアーキテクチャの話 (92) IEEE 754規格と浮動小数点演算
例えば、3GHzクロックの1周期は3.333*10^(-10)秒であるし、太陽の質量は1.9891*10^30Kgというように、工学や理学の分野では、非常に小さな値や非常に大きな値を扱う必要がある。しかし、このような大きな数や小さな数は整数で計算することはできない。このため、浮動小数点形式というデータ表現形式が用いられる。
浮動小数点形式では、数値を1.9891*10^30のように表現する。このとき、1.9891を仮数(Mantissa)と呼び、10の30乗の方を指数(Exponent)と呼ぶ。このように数値を表現すれば、ゼロを30個も並べる必要はなくコンパクトに表現できるので、科学技術計算用には、コンピュータでも浮動小数点形式のデータが使われている。
IEEE 754以前の浮動小数点データフォーマット
コンピュータの揺籃期には、各社が独自に命令アーキテクチャを作り浮動小数点データのフォーマットも独自に決めていた。その代表的な一つがIBMメインフレームの浮動小数点データ形式である。
図1:IBM Hex浮動小数点データ形式
Sは符号で1ビット、EXPは16倍を単位とする指数部、Fractionは最上位ビットの左に小数点があり1.0未満の値である。我々、人間は10進法で計算するので指数部は10を底とするが、2進法で計算するコンピュータの場合は指数部の底は2のベキとする方が適しており、IBM Hex形式では16を底としている。
EXPが64の時に、小数点はFractionの左端にあり、図1のように、EXPが1増加するに従って、小数点の位置が右に4ビットづつ移動する。また、EXPが1減少すると、Fractionの左に4ビットのゼロが追加され、小数点が左に4ビットづつ移動する。ここでEXPの値は、64の場合に指数としてゼロを意味するいわゆる64の下駄はかせ(英語では、バイアスという)表現になっている。これを数式で記述すると、浮動小数点データの値は、
となる。このIBM Hex形式ではEXPが16単位であり、EXP部には7ビットのフィールドがあるので、最大2の252乗、最小2の256乗分の1の指数を表現できる。一方、Fractionは、単精度では24ビット、倍精度では56ビットであるが、指数が4ビット単位であるので、有効ビット数は、最上位の3ビットがゼロの場合の53ビットから、最上位ビットがゼロでない場合の56ビットとなる。一方、CRAY-1では、
図2:CRAY-1の浮動小数点データ形式
となっており、EXPは15ビットを使い、 2のベキ表現でバイアスが16384である。そして、Fractionは48ビットである。つまり、CRAY-1の浮動小数点データ形式は、16を底とする指数を使うIBM Hex形式と較べても表現できる数値の範囲は非常に広いが、そのしわ寄せで、データの有効ビット数が48ビットに切り詰められている。
このように、1970年代までは、各社各様の浮動小数点データ形式を使用していたので、精度や表現できるデータ範囲などがマチマチであり、また、まるめのやり方やエラー検出条件も異なるなどの問題があり、これを標準化しようという動きが起こった。その結果制定されたのが、IEEE Std 754-1985という規格である。