2

我正在计算器上计算某个值 X,而我进行计算的顺序会产生不同的答案。有人可以请教我,为什么会这样?

案例 1:X = (730 * 4800)/1024 = 3421

案例 2:X = 730 * (4800/1024) = 2920

  • CASE 1 实际上更接近预期的结果。
  • CASE 2 的准确性似乎有所下降......?
4

2 回答 2

5

在这两种情况下,都执行整数除法而不是普通(浮点)除法。

整数除法是舍弃小数部分(余数)的除法。

例如,在 CASE 2 中,对 (4800 / 1024) 执行整数除法,结果为 4(而不是 4.6875)。从那里开始乘以 730 * 4 = 2920。

我不确定您使用的是哪个计算器,但通常当您想避免整数除法时,您可以使用浮点数。在你的情况下1024.0。现在,如果这是特定编程语言的一部分,您可能必须使用不同的符号,例如1024.0for (float)1024

要强制浮点除法,您需要将计算更改为

情况1:

X = (730 * 4800)/1024.0 = 3421.875

案例二:

X = 730 * (4800/1024.0) = 3421.875
于 2013-07-19T21:28:00.587 回答
0

在计算除法时,有时我们会丢失浮点精度。所以当你先计算除法时,它会产生一些错误。现在当除法后乘以结果时,实际上是乘以错误。你首先计算乘法,所以我们不会丢失任何东西。然后它被分割,所以误差仍然很小。

尝试这样的事情1/(1/10000)。我确信它会引发ZeroDivision错误,但实际上10000不是infinity

于 2013-07-19T22:03:36.557 回答