1

私は ac# プログラムをやっています。簡単な数学演算をしなければなりません。

72057594037927936.0 - 255.0 = .....

どちらの数も 2 倍です...

72057594037927680.0 

それ以外の

72057594037927681.0 

誰でも私に説明してもらえますか?

ありがとう

4

2 に答える 2

16

減算の正確な結果、

72057594037927681 = 0xffffffffffff01

56 ビットの精度が必要ですが、double53 ビットしかないため、結果は最も近い表現可能な数値に丸められます。

于 2013-07-10T22:10:28.520 に答える
6

浮動小数点数の精度は限られているためです。大きな数から小さな数を足したり引いたりすると、丸め誤差が発生する可能性があります。

代わりに を使用するようにコードを変換するとdecimal(はるかに正確ですが、範囲が狭くなります)、期待どおりの答えが得られます。

// using doubles
72057594037927936.0 - 255.0 // 72057594037927680.0

// using decimals
72057594037927936.0m - 255.0m // 72057594037927681.0m
于 2013-07-10T22:11:21.943 に答える