1

我有一张大学幻灯片,声称做一个连续的总和,比如

1 / i^2

索引“i”从 0 到 2260,不同于对相同数字求和,而是从最大到最小(从 1/ 2260^2 到 1/0^2)。

尝试在 C 上执行此操作,我得到以下结果:

Increasing Order Sum: 1.644491e+00.
Decreasing Order Sum: 1.644491e+00.
Relative Error (abs(Incr. Sum - Decr. Sum) / abs(Incr. Sum)) : 2.700465e-15.

有人可以解释一下为什么会这样吗?我在这些幻灯片上没有解决方案。

提前致谢!:)

4

1 回答 1

6

因为浮点加法通常不是关联的。换句话说,(a + b) + c不一定与 相同a + (b + c)

要查看原因,请尝试运行以下代码:

float a = 1e9;
float b = 1;
a += b;
printf("%f\n", a);

然后考虑如果b加到a100 万次会发生什么。然后考虑如果交换操作会发生什么(即最后添加 1e9)。

于 2012-05-23T18:26:27.477 回答