浮点数在程序中的使用是需要非常小心的,很容易导致程序出现不了想要的结果,最近在学习c++的时候,就觉得要十分注意这样的问题,比如float和double型的数据,一般我们描述他们的时候是按照有效数位和可以表示的范围来描述的,float可以表示的有效数位为6位,double是15位(borlan c++),下面有个例子可以说明这种情况:
#include<iostream> using namespace std; int main() { cout.setf(ios_base::fixed,ios_base::floatfield); float tub=10.0/3.0; double mint=10.0/3.0; const float million=1.0e6; cout<<"tub="<<tub; cout<<",a million tub="<<million*tub; cout<<",ten million tub="<<10*million*tub<<endl; cout<<"mint="<<mint; cout<<",a million mint="<<million*mint<<endl; }
结果为
tub=3.333333,a million tub=3333333.250000;ten million tub=33333332.000000;
mint=3.333333,a million mint=3333333.333333;
从这个结果中我们可以看出float比double的精度低一些,因为系统只保证float有6位的有效位,而系统确保double有15个有效位。故在这个题目中double的值是精确的。