我正在计算器上计算某个值 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(而不是 4.6875)。从那里开始乘以 730 * 4 = 2920。
我不确定您使用的是哪个计算器,但通常当您想避免整数除法时,您可以使用浮点数。在你的情况下1024.0
。现在,如果这是特定编程语言的一部分,您可能必须使用不同的符号,例如1024.0f
or (float)1024
。
要强制浮点除法,您需要将计算更改为
情况1:
X = (730 * 4800)/1024.0 = 3421.875
案例二:
X = 730 * (4800/1024.0) = 3421.875
在计算除法时,有时我们会丢失浮点精度。所以当你先计算除法时,它会产生一些错误。现在当除法后乘以结果时,实际上是乘以错误。你首先计算乘法,所以我们不会丢失任何东西。然后它被分割,所以误差仍然很小。
尝试这样的事情1/(1/10000)
。我确信它会引发ZeroDivision
错误,但实际上10000
不是infinity
。