- 怎样把Linux服务器当作Mac的服务器
- C/C++编程新手错误分析
- C的数据库编程(1)
- C的数据库编程(2)
- 网友zengh写的基于ODBC的通用数据库管理程序
- 关于odbc的一个文挡说明,奉献给大家
- [图文] PHP.MVC的模板标签系统(四)
- 一位前辈对ipc的看法及一网友的回复
- sql server动态连接odbc的dsn
- PFC的使用与探索(一)
- 使用API创建窗体(类似VC的创建过程)
- MFC的 CString 学习笔记 -3
- MFC的 CString 学习笔记 -2
- MFC的 CString 学习笔记 -1
- Java与C/C++的区别(转)
- Java技巧:简化JDBC的开发
- WebLogic的安装和配置
- weblogic的jsp问题解决方法(转)
- Huffman 编码简介(讲解的更好一些,有C的分析)
#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型数值的大小。在分形图形的绘制里面,因为经常涉及到过大或者是过小的数据,而且经常要判断是否跳出循环,所以在里面也常用这种方式做判断。
[编辑:百家电脑学院] [返回学院首页] [返回上一页] []
·上一篇:Effective C++ 的52个条款列表 · 下一篇:C语言编程常见问题解答之常用函数的包含文件(3)

