首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求教double型数据比较精度的有关问题

2013-10-19 
求教double型数据比较精度的问题?int main(){cout 输入两个数 endldouble a0,b0,minum,maxumw

求教double型数据比较精度的问题?
int main()
{
    cout << "输入两个数" << endl;
    double a=0,b=0,minum,maxum;
    while(cin>>a>>b)
   {
    double cha=a-b;
    if(cha==0)
      cout<<"两者相等"<<"\n";
    else
    {
    if(cha>0)
       maxum=a,minum=b;
    else
       maxum=b,minum=a;
    if(cha<0.1&&cha>-0.1)
       cout<<"两者近似, 差值为"<<cha<<"\n";
    cout<<"最大值"<<maxum<<"\n"
        <<"最小值"<<minum<<"\n"
        <<"差值"<<cha<<"\n";
    };
   };
    return 0;
}
很奇怪,测试1.1 1.2会说两者近似,大部分不会,差值都是0.1,求教,那编错了吗?
[解决办法]
任何不等于0.5的N次方的整数倍的小数都不能用浮点数精确表示,只能近似表示
我没仔细算,只举个例子:如果0.1在内存中用0.99999999近似表示,0.2在内存中用0.20000001近似表示,那么在楼主的程序中,它们就不近似;相反,如果0.1在内存中用0.10000001近似表示,0.2在内存中用0.19999999近似表示,那么在楼主的程序中,它们就近似
关键就一句话,别比较浮点数的精确相等。在数学中0.2-0.1=0.1,在浮点数中这个等号就未必成立——除非参与运算的三个数数量级相近,并且都恰好是0.5的N次方的整数倍,才有可能成立
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

热点排行