使い方
- 形式を選びます:半精度、単精度、倍精度のどれかです。
- 入力する値の下で、10進数を選ぶと数値を変換し、ビット列(16進数)を選ぶと格納されたビットを読み取ります。
- 値に入力します。入力に合わせてページが更新されます。
- 色の付いたビット、部分の表、結果の表を読みます。丸めの誤差は、10進数を入力した場合だけ表示されます。
数値が部分に分かれる仕組み
2進の浮動小数点数は、3つの部分からできています。符号ビット、指数部、仮数部です。単精度は1、8、23ビット、倍精度は1、11、52ビット、半精度は1、5、10ビットを使います。正規化数の値は(−1)^符号 × 1.仮数部 × 2^(指数部の値 − バイアス)です。単精度のバイアスは127です(IEEE 754が2進の形式の部分を定義しています)。
0.15625 = 1.25 × 2^−3 → 符号0、指数127 − 3 = 124 = 01111100、仮数部0100… → 0 01111100 01000000000000000000000 = 3E200000
最も近い値への丸め
多くの10進数は、2進では正確に格納できません。ページは入力された数を、形式が格納できる最も近い値に丸めます。同点の場合は、最後のビットが偶数になる値を選びます。2つの隣り合う値の間隔は1 ulp(最後の桁の単位)で、丸めの誤差は最大で半分の1 ulpです。単精度の0.1の格納された値は0.100000001490116119384765625なので、誤差は+1.49 × 10^-9、つまり0.2 ulpです。
特別な値
- ゼロ:指数部と仮数部がすべて0です。符号ビットは保持されるため、−0と+0は別のビット列になります。
- 非正規化数:指数部がすべて0で、隠れたビットがありません。0と最小の正規化数の間の隙間を埋めます。
- 無限大:指数部がすべて1で、仮数部がすべて0です。有限の最大値を超えて丸められる10進数は無限大になります。
- NaN:指数部がすべて1で、仮数部が0ではありません。仮数部の最上位ビットが、静かなNaNとシグナリングNaNを分けます。残りの仮数部がペイロードです。
このページが扱わないこと
- 演算:このページは数値がどう格納されるかを示すもので、格納された2つの数の和や積の結果は扱いません。
- IEEE 754-2008の10進浮動小数点形式(基数10)や、bfloat16、8ビット浮動小数点数などのほかの形式。
- 2の補数の整数:2の補数の計算ツールを参照してください。
計算例:単精度の0.1
形式を単精度にして、0.1を入力します。0.1は1.6 × 2^−4で、仮数1.6は23ビットの仮数部では書けません。仮数部は切り上げられるため、格納された値は0.1よりわずかに大きくなります。
| 結果 | 値 |
|---|---|
| 16進数 | 3DCCCCCD |
| 格納された正確な値 | 0.100000001490116119384765625 |
| 丸めの誤差(格納された値 − 入力値) | +1.490116119384765625e-9 |
| 丸めの誤差(ulp単位) | +0.200 |
よくある質問
コンピューターで0.1 + 0.2が正確に0.3にならないのはなぜですか?
0.1も0.2も2進では正確に格納できず、その和もまた丸められるからです。倍精度では、0.1 + 0.2は0.30000000000000004になります。これは格納された0.3のすぐ上の値です。
格納された正確な値と、入力した数の違いは何ですか?
入力した数は、入力された10進数です。格納された正確な値は、形式が実際に保持する2進数を全部書き下したものです。丸めの誤差はその差なので、2つがどれだけ離れているかが分かります。
ulpとは何ですか?
ulpは最後の桁の単位で、格納された値と、同じ指数の範囲にある次の値との間隔です。最も近い値への丸めは、常に半分の1 ulp以内に収まり、このページは誤差を数値とulpの両方で示します。
単精度で1e39が無限大になるのはなぜですか?
単精度の最大値は約3.4028235 × 10^38です。それを超えて丸められる数には、有限の格納値がないため、この形式では無限大を使い、ページは結果を大きすぎると表示します。
NaNは情報を保持できますか?
はい。NaNの仮数部のビットは値の計算には使われないため、プログラムはそこにペイロードを格納できます。このページはNaNの仮数部をペイロードとして示し、静かなものかシグナリングかを表示します。
出典
- IEEE 754:IEEE Standards Association(英語)
- Wikipedia(英語):IEEE 754
- Wikipedia(英語):Single-precision floating-point format
- Wikipedia(英語):Double-precision floating-point format
- Wikipedia(英語):Half-precision floating-point format
数値と文章の最終確認日:2026年11月11日水曜日。