浮動小数点は、基数 2 の科学表記法と考えることができます。浮動小数点では、仮数 (別名仮数) と指数の固定ビット数に制限されます。float
(24 ビット) またはdouble
(53 ビット)のどちらを使用しているかによって、その数は異なります。
基数 10 の科学的表記法を考えると、もう少し馴染みがあります。仮数が整数に制限され、常に有効数字 3 桁で表されると想像してください。次に、この表現で連続した数の次の 2 つのペアを考えてみましょう。
- 100 x 10 0および 101 x 10 0 (100 および 101)
- 100×10 1および 101×10 1 (1000 および 1010)
最初のペアの数値間の距離 (別名差) は 1 であるのに対し、2 番目のペアでは 10 であることに注意してください。両方のペアで、仮数は 1 だけ異なります。これは、整数間で可能な最小の差ですが、差は指数でスケーリングされます。そのため、数値が大きいほど、浮動小数点でそれらの間のステップが大きくなります (最初の質問)。
2 番目の質問については、1000 (100 x 10 1 )に 1 (100 x 10 -2 ) を加算する場合を見てみましょう。
- 100×10 1 + 100×10 -2 = 1001×10 0
ただし、仮数部の有効数字は 3 桁に制限されているため、最後の数値は (丸め後に) 次のように正規化されます。
1000 に戻ります。浮動小数点値を変更するには、その数値と次の数値の差の少なくとも半分を追加する必要があります。この最小差は、数値のスケールによって異なります。
2 進浮動小数点でもまったく同じことが起こっています。詳細 (例: 正規化、ガード ディジット、暗黙の基数ポイント、暗黙のビット) があり、優れた記事What Every Computer Scientist Should Know About Floating-Point Arithmeticで読むことができます。