IEEE754とは
小数の計算性能と移植性改善のために制定された。おそらく現代のほとんどのコンピュータや言語処理系が採用している少数を扱うときの規格。
値の表現方法について
その表現は符号部(sign)、指数部(exponent)、仮数部(fraction)に分けられる
value | start | end | length |
---|---|---|---|
sign | 31 | 31 | 1 |
exponent | 23 | 30 | 8 |
fraction | 0 | 22 | 23 |
画像の出典:https://en.wikipedia.org/wiki/IEEE_754-1985
それぞれを組み合わせて以下のように少数を表現している
(-1)sign * (1 + fraction) * 2exponent-127
sign bitを符号の有無に利用している点はシンプルだが、仮数部および指数部は 1を足したり127を引いたりしていてややこしく、初見では理解しがたいため解説を後述する
仮数部はなぜ1を足しているのか。
これは科学的表記法を2進数に適応した場合を考えるとわかりやすい。
7.5025 + 102 = 750.25
これが科学的表記法。凡例は
m * 10n ただし 0 <= m < 1
これを2進数に適応すると
1.01110111001 * 29 = 1011101110.01
となる。
2進で表現した小数は表現する数値が0以外の場合、科学的表記法に直すと仮数部の左端は必ず1になる。以下に適当な例をあげる
10進数 | 2進数 | 科学的表記法 |
---|---|---|
0.75 | 0.11 | 1.1 * 2^ -2 |
12.5 | 1100.1 | 1.1001 * 2^ -3 |
33.25 | 100001.01 | 1.0000101 * 2^ -5 |
IEEE754ではこちらを省略するようになっている
IEEE754では,正規化された2進数の先頭の1を仮数フィールドの中で直接持たないようにした.したがって,仮数の実際の長さは,単精度では24ビットであり,倍精度では53ビット(1+52)である.正確を期す場合には,頭に1を付けた24まビットの数値を指して“significand”という用語を使用し,23ビットの数値を指して“fraction”という用語を使用する.0には前に1が付かないので,ハードウエアが1を付加しないようにするために,特定の値が予約されている.
コンピュータの構成と設計 3.5章 浮動小数点演算より抜粋(補足:倍精度小数点に関する記述を省いてある)
※予約されている特定の値は単精度浮動小数点の場合はオール0である
浮動小数点数の表現で省略した1を+1して戻すことで実際の値としている。
指数部はなぜ127を引いているのか
これはゲタばき表現、と呼ばれるものであり数値比較を単純にするために
- 00000000の状態を最小値に(2^ -127)にしたい
- 11111111の状態を最大値に(2^ 128)にしたい
という目標がある。ので8進数で0~255の値を計算した後、そこから127を引いてcの値に変換する。 この操作をゲタばき(バイアス)という。
最も小さな負の指数を00...00と表し,最も大きな正の指数を11...11と表すような,表記法を用いることが望ましい.それをゲタばき表現(biasedrepresentation)と呼ぶ.ゲタばき表現をとる際に,実際の値を得るために,通常の符号なしの表現から引く数値をゲタ(bias)という.
コンピュータの構成と設計 3.5章 浮動小数点演算より抜粋
まとめ
- 最上位ビット(31ビット目)は0で整数、1で負数の符号を表す
- 仮数部では科学的表記法の2進数表現と同じ考え方だが、最上位ビットになる「1」を省略する
- 指数部ではゲタばき表現を使って-127~128を表現する
- 作者: デイビッド・A・パターソン
- 出版社/メーカー: 日経BP社
- 発売日: 2016/10/26
- メディア: Kindle版
- この商品を含むブログ (6件) を見る