電卓で特定の値 X を計算していますが、計算を行う順序によって異なる答えが得られます。なぜそうなのかについて、誰かが私に教えてもらえますか?
ケース 1: X = (730 * 4800)/1024 = 3421
ケース 2: X = 730 * (4800/1024) = 2920
- 実際には CASE 1 の方が望ましい結果に近いです。
- CASE 2 では精度が落ちているような…?
電卓で特定の値 X を計算していますが、計算を行う順序によって異なる答えが得られます。なぜそうなのかについて、誰かが私に教えてもらえますか?
ケース 1: X = (730 * 4800)/1024 = 3421
ケース 2: X = 730 * (4800/1024) = 2920
どちらの場合も、通常の (浮動小数点) 除算の代わりに整数除算が実行されました。
整数除算は、小数部分(剰余)を切り捨てる除算です。
たとえば、CASE 2 では、(4800 / 1024) に対して整数除算が実行され、結果は (4.6875 ではなく) 4 でした。そこから乗算すると、730 * 4 = 2920 になりました。
どの計算機を使用しているかはわかりませんが、通常、整数除算を避けたい場合は、代わりに浮動小数点数を使用できます。あなたの場合1024.0
。これが特定のプログラミング言語の一部である場合は、別の表記法を使用する必要がある場合があります。たとえば1024.0f
、 または(float)1024
.
浮動小数点除算を強制するには、計算を次のように変更する必要があります
ケース 1:
X = (730 * 4800)/1024.0 = 3421.875
ケース 2:
X = 730 * (4800/1024.0) = 3421.875
除算を計算すると、浮動小数点の精度が失われることがあります。そのため、最初に除算を計算すると、多少の誤差が生じます。除算後の結果を乗算すると、実際にはエラーが乗算されます。最初に乗算を計算するので、何も失うことはありません。その後、分割されるため、エラーは最小限に抑えられます。
このようなことを試してください1/(1/10000)
。エラーが発生すると確信していZeroDivision
ますが、実際にはそうでは10000
ありませんinfinity
。