| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1784 人关注过本帖, 1 人收藏
标题:c++ 相同的数相减居然不为零(急死我了)
只看楼主 加入收藏
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
收藏(1)
 问题点数:0 回复次数:12 
c++ 相同的数相减居然不为零(急死我了)
void main()
{
double a,b;
a=(0.5-0.1)/(-0.2+0.6);
b=-a/(0.2+0.6);
cout<<b+1.25;
}
程序本来很大   我把范围缩小并且简化过了
上面这个程序很easy   能口算出来   a=1  b=-1.25       cout出来的应该是0
不过大家可以把这个程序放到VC里编译一下   我的结果出来是-2.22045e-016

如果把-0.2+0.6 改为0.4   或者把0.2+0.6改成0.8   最后结果都是0
我原本的程序括号里的数都是变量

已经崩溃很久了,求教高手
搜索更多相关主题的帖子: double 
2007-11-25 20:48
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
这是计算机,不是理想的,数的位数是有限的
2007-11-25 20:55
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
收藏
得分:0 
不是位数的问题
我把精度设到最小也一样
cout.precision(2);              //两位小数

另外我改成         b=-1/(0.2+0.6);           //把a直接换成1  输出就是0了

2007-11-25 21:03
Freeness
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-25
收藏
得分:0 
晕 超搞 你把double改成float就行了 答案就是0了!
2007-11-25 22:11
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
收藏
得分:0 
这个我试过了
确实把float就是0     不过为什么double 会出这种问题

2007-11-25 22:15
Freeness
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-25
收藏
得分:0 
。。。。。。你去看一下关于小数的二进制问题就会明白了!
2007-11-25 22:18
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
#include <iostream>
using namespace std;
int main(void)
{
    double a,b;
    a=(0.5-0.1)/(-0.2+0.6);
    //    a=(0.5-0.1)/0.4;
    b=-1/(0.2+0.6);

    if(a==1.0)
        cout<<"a等于1"<<endl;

    if(b==-1.25)
        cout<<"b等于1.25"<<endl;

    getchar();
    return 0;
}
运行下看结果,然后把注释掉的那句加进来再看看。
-0.2+0.6这个计算时有精度损失,结果不为0.4,而是接近0.4的数。
2007-11-25 22:44
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
收藏
得分:0 
void main()
{
                     double a=0.3/(0.6-0.3);
    double b=0.4/(0.6-0.2);
    cout<<a-1<<endl;
    cout<<b-1<<endl;
}
这个输出的结果为  
0
2.22045e-016
那为什么0.6-0.3没有损失呢?

2007-11-25 22:55
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
你要知道浮点数在计算机里是怎样表示的。

你可以去搜索下,我看过,但是看不懂!最好的办法就是尽量避免!

Fight  to win  or  die...
2007-11-25 23:11
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
是要研究下,以后小数据 不搞清楚
小问题能决定很多事情哦
我还是去百度看下``

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-11-26 15:10
快速回复:c++ 相同的数相减居然不为零(急死我了)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022832 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved