wir*_*ark 1 c math floating-point
我有一个大学powerpoint幻灯片声称做了一个继承的总和
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.
Run Code Online (Sandbox Code Playgroud)
有人能解释我为什么会这样吗?我对这些幻灯片没有解决方案.
提前致谢!:)
因为浮点加法通常不是关联的.换句话说,(a + b) + c不一定相同a + (b + c).
要了解原因,请尝试运行此代码:
float a = 1e9;
float b = 1;
a += b;
printf("%f\n", a);
Run Code Online (Sandbox Code Playgroud)
然后考虑如果添加会发生什么b,以a100万次.然后考虑如果你交换操作会发生什么(即最后添加1e9).
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |