私は ac# プログラムをやっています。簡単な数学演算をしなければなりません。
72057594037927936.0 - 255.0 = .....
どちらの数も 2 倍です...
72057594037927680.0
それ以外の
72057594037927681.0
誰でも私に説明してもらえますか?
ありがとう
減算の正確な結果、
72057594037927681 = 0xffffffffffff01
56 ビットの精度が必要ですが、double
53 ビットしかないため、結果は最も近い表現可能な数値に丸められます。
浮動小数点数の精度は限られているためです。大きな数から小さな数を足したり引いたりすると、丸め誤差が発生する可能性があります。
代わりに を使用するようにコードを変換するとdecimal
(はるかに正確ですが、範囲が狭くなります)、期待どおりの答えが得られます。
// using doubles
72057594037927936.0 - 255.0 // 72057594037927680.0
// using decimals
72057594037927936.0m - 255.0m // 72057594037927681.0m