问题讨论:程序 C/C++ Java GUI编程 ASP Php Shell Perl Web开发 软件工程 三大件 机箱 存储设备 光存储 音频设备 视频设备 外设 购机
asp php java C CGI .net vb delphi unix|linux sql Word Excel WPS OutLook Powerpoint Dreamweaver FPage/Golive CSS/HTML DOM/JS
热门词:流程图 excel 入侵检测 vss Windows 安全漏洞 QQ空间 事件编程 MFC

 编程开发 > c语言 

C++的浮点数计算导致错误分析

[2006-11-3 19:50:03] [来源: 百家电脑学院] [我要投稿]

今天在国外一个新闻组上看到一个比较经典的错误,有一个人写了这样一段代码:

#i nclude <iostream>
using namespace std;

int main()
{
    double num, num2;
    for (num=-30; num<=30; num+=0.1)
    {
          num2=-2*(num*num)+3*(num);
          if (num2==1)
                cout << num << endl;
    }
    return(0);
}
他在新闻组上问为什么得不到为1的输出结果,回贴的人非常多,差不多都能指出这是因为计算机浮点数计算造成的问题。我在写程序的时候也遇到过这个问题,于是就写个文章来说明一下。因为计算机不能表示精确的数值,这是大家都知道的,所以在这里double*double的值也不是精确的,再怎么算,1也不一定是1,而可能是0.999999或者1.000001之类的值,至于具体是什么值就要看机器了。而且用==运算符来判断double型或者是float型的数值本身就是不正确的,应该用abs(x-1)<=0.00....来判断一个double型或者是float型数值的大小。在分形图形的绘制里面,因为经常涉及到过大或者是过小的数据,而且经常要判断是否跳出循环,所以在里面也常用这种方式做判断。

该篇文章来源于:百家学院 (http://www.9php.com),复制请保留此行.

·看过 C++的浮点数计算导致错误分析 文章的还看过:

·百家学院 | 最新评论·

评论内容:不能少于5个字,请自觉遵守互联网相关政策法规。

用户名: 验证码: 验证码,看不清楚?请点击刷新验证码