我有一张大学powerpoint幻灯片声称要做一个像
这样的继承的总和1 / i ^ 2
索引“i”从0到2260,不同于做相同数字的总和但从最大到最小(从1/2260 ^ 2到1/0 ^ 2)。< / p>
尝试在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.
有人可以解释一下为什么会这样吗?我在这些幻灯片上没有解决方案。
提前致谢! :)
答案 0 :(得分:6)
通常,浮点加法不是associative。换句话说,(a + b) + c
不一定与a + (b + c)
相同。
要了解原因,请尝试运行此代码:
float a = 1e9;
float b = 1;
a += b;
printf("%f\n", a);
然后考虑如果将b
添加到a
100万次会发生什么。然后考虑如果你交换操作会发生什么(即最后添加1e9)。