精度は固定されており、倍精度の場合は正確に 2 進数で 53 桁(暗黙の先頭の 1 を除外すると 52 桁) です。これは 10 進数で約 15 桁になります。
OP は、正確に 53 の 2 進数を持つことが「約」15 の 10 進数を意味する理由を詳しく説明するように私に求めました。
これを直感的に理解するために、精度の低い浮動小数点形式を考えてみましょう。倍精度数のような 52 ビットの仮数の代わりに、4 ビットの仮数を使用します。
したがって、各数値は (-1) s × 2 yyy × 1.xxxx (s
は符号ビット、yyy
は指数、1.xxxx
は正規化された仮数) のようになります。すぐに議論するために、符号や指数ではなく、仮数のみに焦点を当てます。
1.xxxx
以下は、すべての値がどのように表示されるかを示した表xxxx
です (すべての丸めは、デフォルトの浮動小数点丸めモードの動作と同様に、半分から偶数になります)。
xxxx | 1.xxxx | value | 2dd | 3dd
--------+----------+----------+-------+--------
0000 | 1.0000 | 1.0 | 1.0 | 1.00
0001 | 1.0001 | 1.0625 | 1.1 | 1.06
0010 | 1.0010 | 1.125 | 1.1 | 1.12
0011 | 1.0011 | 1.1875 | 1.2 | 1.19
0100 | 1.0100 | 1.25 | 1.2 | 1.25
0101 | 1.0101 | 1.3125 | 1.3 | 1.31
0110 | 1.0110 | 1.375 | 1.4 | 1.38
0111 | 1.0111 | 1.4375 | 1.4 | 1.44
1000 | 1.1000 | 1.5 | 1.5 | 1.50
1001 | 1.1001 | 1.5625 | 1.6 | 1.56
1010 | 1.1010 | 1.625 | 1.6 | 1.62
1011 | 1.1011 | 1.6875 | 1.7 | 1.69
1100 | 1.1100 | 1.75 | 1.8 | 1.75
1101 | 1.1101 | 1.8125 | 1.8 | 1.81
1110 | 1.1110 | 1.875 | 1.9 | 1.88
1111 | 1.1111 | 1.9375 | 1.9 | 1.94
それは何桁の10進数だと思いますか? 一意ではありませんが、2 桁の範囲内の各値がカバーされているという点で、2 と言えます。または、すべての一意の値をカバーする 3 と言うことができますが、小数点以下 3 桁の範囲内のすべての値をカバーするわけではありません。
議論のために、2 桁の 10 進数があるとします。10 進数の精度は、これらの 10 進数のすべての値を表すことができる桁数になります。
では、すべての数値を半分にするとどうなるでしょうか (つまり、yyy
= -1 を使用しています)。
xxxx | 1.xxxx | value | 1dd | 2dd
--------+----------+-----------+-------+--------
0000 | 1.0000 | 0.5 | 0.5 | 0.50
0001 | 1.0001 | 0.53125 | 0.5 | 0.53
0010 | 1.0010 | 0.5625 | 0.6 | 0.56
0011 | 1.0011 | 0.59375 | 0.6 | 0.59
0100 | 1.0100 | 0.625 | 0.6 | 0.62
0101 | 1.0101 | 0.65625 | 0.7 | 0.66
0110 | 1.0110 | 0.6875 | 0.7 | 0.69
0111 | 1.0111 | 0.71875 | 0.7 | 0.72
1000 | 1.1000 | 0.75 | 0.8 | 0.75
1001 | 1.1001 | 0.78125 | 0.8 | 0.78
1010 | 1.1010 | 0.8125 | 0.8 | 0.81
1011 | 1.1011 | 0.84375 | 0.8 | 0.84
1100 | 1.1100 | 0.875 | 0.9 | 0.88
1101 | 1.1101 | 0.90625 | 0.9 | 0.91
1110 | 1.1110 | 0.9375 | 0.9 | 0.94
1111 | 1.1111 | 0.96875 | 1. | 0.97
以前と同じ基準で、現在は 10 進数 1 桁を扱っています。2 進浮動小数点数と 10 進浮動小数点数は互いにきれいにマッピングされないため、指数に応じて 10 進数の桁数が増減することがわかります。
同じ引数が倍精度浮動小数点数 (仮数が 52 ビット) にも適用されますが、その場合のみ、指数に応じて 15 桁または 16 桁の 10 進数が得られます。