0

なんでそうなの?

私が試してみるとき:

Math.pow(2,58)= 288230376151711740実際には、288230376151711744です。

また

Math.pow(2,57)= 144115188075855870、実際には144115188075855872に等しい

警告なしにその番号をスローするだけです。最大値に達した場合に、それがいくつかの数値を超えるのをやめたかどうかはわかります。ただし、これは最初のn桁を正しく計算し、桁の最後でのみ正しくないようです。

4

1 に答える 1

3

数値型の表示精度を使い果たしました。秘訣は、変数に格納されている実際の値が 2 の累乗で正確になることです。一方、トレースすると、エンジンは表示された値を 16 桁で切り捨てます。これは、処理中に 10 で除算するためです。指数部なしで取得した元の値と比較した場合の「マシン ゼロ」。これは、不正確な浮動小数点除算によって発生するホワイト ノイズが表示されるのを防ぐために行われます。倍精度数よりも多くのビットを格納する大きな整数/浮動小数点数に進む場合、この問題を回避できます。

于 2013-01-14T05:27:16.427 に答える