程序输出错误

[复制链接]
1224|3
 楼主| xsgy123 发表于 2013-7-30 19:01 | 显示全部楼层 |阅读模式
int _tmain(int argc, _TCHAR* argv[])
{
    double a=30;
    double b=1.0E-25;
    double c=a+b;
    cout <<b <<endl;
    cout <<c-a<<endl;
    cout<<1/(c-a)<<endl;
    cout<<1/b<<endl;
    //cin.get();
    return 0;
}
输出的结果就是
b = 1.0E-25
c-a = 0.0
1/(c-a) = 1.#INf
1/b =1.0E+25

问题出在哪了呢 。。。
无冕之王 发表于 2013-7-30 19:15 | 显示全部楼层
这么小的精度,估计在 c=a+b; 的时候已经丢失了,你的输出也显示了 c-a=0。
浮点数精度都是有限的,量级差太远做运算的时候经常丢失精度。
dfsa 发表于 2013-7-30 19:30 | 显示全部楼层
double 有效精度没这么多
如果要这么弄的话,只能用大数来做了.
火箭球迷 发表于 2013-7-30 19:43 | 显示全部楼层
浮点数有精度限制,double的好像是16个有效位。
30和 1.0E-25的差距超过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部