#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语言编程常见问题解答之常用函数的包含文件(3)

