C++入门——浮点数表示范围注意事项
程序员文章站
2022-06-20 12:15:55
...
大家好,今天来介绍浮点型的表示范围
C++中浮点型分为float,double和long double型,float.h中定义:
//the following are the minimum number of significant digits
#define DBL_DIG 15 //double
#define FLT_DIG 6 //float
#define LDBL_DIG 18 //long double
即float最少可表示6位小数,double最少可表示15位小数,long double最少可表示18位小数。
下面来贴一个例子来说明一下:
#include<iostream>
int main()
{
using namespace std;
cout.setf(ios_base::fixed, ios_base::floatfield); //fixed-point
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 << ",\nand ten million tub = " << million * 10 * tub << endl;
cout << "mint = " << mint;
cout << ", a million mint = " << million * mint;
system("pause");
return 0;
}
运行结果为:
程序第五行第一个参数是将输出用小数形式表示,第二个参数是将输出限定为6位小数的浮点数形式。
可以看到,最开始的tub表示为6位小数的浮点数,但tub是float型,精度只有六位,所以乘以million后,后面的值有偏差,不是精确值。而mint最开始也表示为6位的浮点型,是mint是double型的,精确度为15位,所以乘以million后,有13个3仍然是精确的,如果计算million*1000*mint超出15位得到的数值就不精确了。因此使用浮点数时要注意计算精度的问题。
下期见!
上一篇: Django之ORM数据映射
下一篇: 辅导资料 不定方程的解法