ダブルに格納できる最大の整数 質問する

ダブルに格納できる最大の整数 質問する

精度を失わずに IEEE 754 double 型に格納できる最大の「非浮動小数点」整数は何ですか?

言い換えれば、次のコードフラグメントは以下を返します。

UInt64 i = 0;
Double d = 0;

while (i == d)
{
        i += 1; 
        d += 1;
}
Console.WriteLine("Largest Integer: {0}", i-1);

ベストアンサー1

精度を失わずに double に格納できる最大の整数は、double の最大値と同じです。つまり、DBL_MAX約 1.8 × 10 308です(double が IEEE 754 64 ビット double の場合)。これは整数であり、正確に表現されます。

代わりに知りたいのは、最大の整数が何であるか、そしてそれより小さいすべての非負整数が精度を失わずに IEEE 64 ビット倍精度数に格納できるかどうかです。IEEE 64 ビット倍精度数には 52 ビットの仮数部があるため、2 53 (負の側は-2 53 )になります。

  • 2 53 + 1 は、先頭の 1 と末尾の 1 の間にゼロが多すぎるため、保存できません。
  • 2 53未満の値はすべて格納できます。その場合、52 ビットは仮数部に明示的に格納され、指数部によって実質的にもう 1 つが提供されます。
  • 2 53は 2 の小さい累乗なので、明らかに保存できます。

あるいは別の見方をすると、指数からバイアスが取り除かれ、符号ビットは問題とは無関係なので無視すると、double に格納される値は 2 の累乗に 52 ビット整数を 2 exponent − 52倍したものになります。したがって、指数 52 では、 2 52から 2 53 − 1までのすべての値を格納できます。次に、指数 53 では、 2 53 の後に格納できる次の数値は2 53 + 1 × 2 53 − 52です。したがって、精度の低下は 2 53 + 1 で最初に発生します。

おすすめ記事