7

Java を見ると (他の言語でもおそらく似ているか同じです)、long と double はどちらも 8 バイトを使用して値を格納します。

long は 8 バイトを使用して、-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの長整数を格納します。

double は 8 バイトを使用して、最大 16 桁の有効数字で -1.7E308 から 1.7E308 までの倍精度浮動小数点数を格納します。

私の質問は、両方が同じバイト数 (8 バイトまたは 2^64) を使用している場合、どうすればもっと長い数値を二重に格納できるのでしょうか? 1.7E308 は、9,223,372,036,854,775,807 よりもはるかに大きいです。

4

4 に答える 4

2

double は、基本的に格納できる数値間の間隔を大きくすることで、より大きな数値を格納できます。double の範囲内のすべての整数がその double で表現できるわけではありません。

より具体的には、double には、符号を格納するための 1 ビット (S)、指数 E を格納するための 11 ビット、および仮数 (M) と呼ばれる精度の 52 ビットがあります。

ほとんどの数値 (いくつかの特殊なケースがあります) では、double は数値 (-1)^S * (1 + (M * 2^{-52})) * 2^{E - 1023} を格納するため、 E が大きい場合、M を 1 だけ変更すると、結果の数値のサイズが 1 よりもはるかに大きくなります。これらの大きなギャップにより、ダブルスはロングスよりも広いレンジを得ることができます。

于 2013-09-08T17:43:07.780 に答える