IEEE 浮動小数点演算標準 (IEEE 754) は、1985 年に米国浮動小数点演算の技術標準として制定されました。 電気電子学会 (IEEE) 。この標準は、浮動小数点の確実な使用を困難にし、移植性を低下させる多様な浮動小数点実装で見つかった多くの問題に対処しました。 IEEE 標準 754 浮動小数点は、現在、Intel ベースの PC、Mac、およびほとんどの Unix プラットフォームを含むコンピュータ上で実数を表す最も一般的な表現です。
浮動小数点数を表現するにはいくつかの方法がありますが、ほとんどの場合、IEEE 754 が最も効率的です。 IEEE 754 には 3 つの基本コンポーネントがあります。
- 仮数部の符号 –
これは名前の通りシンプルです。 0 は正の数を表し、1 は負の数を表します。 - 偏りのある指数 –
指数フィールドは、正と負の両方の指数を表す必要があります。格納された指数を取得するために、実際の指数にバイアスが追加されます。 - 正規化された仮数 –
仮数は、有効数字で構成される科学表記法または浮動小数点数の一部です。ここでは、O と 1 の 2 桁しかありません。したがって、正規化された仮数は、小数点の左側に 1 が 1 つだけある仮数となります。
IEEE 754 数値は、上記の 3 つの要素に基づいて、単精度と倍精度の 2 つに分割されます。
| 種類 | サイン | 偏った指数 | 正規化されたマンティザ | バイアス |
|---|---|---|---|---|
| 単精度 | 1(31ビット目) | 8(30-23) | 23(22-0) | 127 |
| 倍精度 | 1(63ビット目) | 11(62-52) | 52(51-0) | 1023 |
例 -
85.125 85 = 1010101 0.125 = 001 85.125 = 1010101.001 =1.010101001 x 2^6 sign = 0 1. Single precision: biased exponent 127+6=133 133 = 10000101 Normalised mantisa = 010101001 we will add 0's to complete the 23 bits The IEEE 754 Single precision is: = 0 10000101 01010100100000000000000 This can be written in hexadecimal form 42AA4000 2. Double precision: biased exponent 1023+6=1029 1029 = 10000000101 Normalised mantisa = 010101001 we will add 0's to complete the 52 bits The IEEE 754 Double precision is: = 0 10000000101 0101010010000000000000000000000000000000000000000000 This can be written in hexadecimal form 4055480000000000>
特別な値: IEEE は、あいまいになる可能性のあるいくつかの値を予約しています。
- ゼロ -
ゼロは、指数と仮数が 0 で表される特別な値です。-0 と +0 は、両方とも等しいですが、別個の値です。
- 非正規化 –
指数がすべて 0 で仮数がすべて 0 でない場合、その値は非正規化された数になります。これは、この数値には 2 進小数点の前に想定される先頭の 1 がないことを意味します。 - 無限 –
+infinity と -infinity の値は、すべて 1 の指数とすべて 0 の仮数で表されます。符号ビットは、負の無限大と正の無限大を区別します。無限値の演算は IEEE で明確に定義されています。 - 非数 (NAN) –
値 NAN は、エラーである値を表すために使用されます。これは、指数フィールドがゼロ符号ビットを持つすべて 1 であるか、1 ではなくその後にゼロが続く仮数である場合に表されます。これは、まだ値を保持していない変数を示すために使用される可能性のある特別な値です。
| 指数 | マンティサ | 価値 |
|---|---|---|
| 0 | 0 | 正確に0 |
| 255 | 0 | 無限大 |
| 0 | 0ではない | 非正規化された |
| 255 | 0ではない | 数値ではありません (NAN) |
倍精度の場合も同様 (255 を 2049 に置き換えるだけ)、浮動小数点数の範囲:
| 非正規化された | 正規化された | 近似10進数 | |
|---|---|---|---|
| 単精度 | ±2-149から (1 – 2-23)×2-126 | ±2-126に (2 – 2-23)×2127 | ±約10-44.85約10まで38.53 |
| 倍精度 | ±2-1074から (1 – 2-52)×2-1022 | ±2-1022に (2 – 2-52)×21023 | ±約10-323.3約10まで308.3 |
正の浮動小数点数の範囲は、正規化された数値と、分数の精度の一部のみを使用する非正規化された数値に分割できます。すべての浮動小数点数には対応する否定値があるため、上記の範囲はゼロを中心に対称になります。
これまでに紹介したスキームでは単精度浮動小数点数で表現できない、次の 5 つの異なる数値範囲があります。
- – (2 – 2 より小さい負の数)-23)×2127(マイナスオーバーフロー)
- – 2 より大きい負の数-149(負のアンダーフロー)
- ゼロ
- 2 未満の正の数-149(正のアンダーフロー)
- (2 – 2 より大きい正の数)-23)×2127(正のオーバーフロー)
オーバーフローは通常、値が大きくなりすぎて表現できないことを意味します。アンダーフローは精度の低下を意味するだけであり、ゼロに厳密に近似されることが保証されているため、それほど深刻な問題ではありません。
有限の IEEE 浮動小数点数の合計有効範囲の表を以下に示します。
| バイナリ | 10進数 | |
|---|---|---|
| シングル | ±(2 – 2-23)×2127 | 約±1038.53 |
| ダブル | ±(2 – 2-52)×21023 | 約±10308.25 |
特別作戦 –
| 手術 | 結果 |
|---|---|
| n ÷ ±無限大 | 0 |
| ±無限大 × ±無限大 | ±無限大 |
| ±非ゼロ ÷ ±0 | ±無限大 |
| ±有限 × ±無限 | ±無限大 |
| 無限+無限 無限 – -無限 | +無限大 |
| -無限 – 無限 -無限大 + – 無限大 | – 無限 |
| ±0 ÷ ±0 | NaN |
| ±無限大 ÷ ±無限大 | NaN |
| ±無限大×0 | NaN |
| NaN == NaN | 間違い |