浮点数计算中的精度问题

猜测下面的代码的输出是什么

#include <stdio.h>

int main()
{
    
double x, y, z;
    
double sum;
    x 
= 1e20f;
    y 
= -1e20f;
    z 
= 10.0f;
    sum 
= x + z + y;
    printf (
"sum=%f\n",sum);
}


在VS2005下测试,结果是
sum=0.000000
而如果调换一下连加计算式中z和y的位置则结果为
sum=10.000000

可以得出两点:
1 浮点数预算会有精度损失,大数会掩盖小数,所以当进行多个浮点数求和时,应该从小到大相加。
2 多个数连加,操作顺序是从左至右进行的。

posted on 2008-01-03 15:01 随便写写 阅读(533) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(1)

随笔分类(30)

随笔档案(16)

文章分类(18)

文章档案(9)

链接

搜索

最新评论

阅读排行榜

评论排行榜