打印

程序输出错误

[复制链接]
1087|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

粉丝