欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

}
运行结果为:

C++入门——浮点数表示范围注意事项

程序第五行第一个参数是将输出用小数形式表示,第二个参数是将输出限定为6位小数的浮点数形式。

可以看到,最开始的tub表示为6位小数的浮点数,但tub是float型,精度只有六位,所以乘以million后,后面的值有偏差,不是精确值。而mint最开始也表示为6位的浮点型,是mint是double型的,精确度为15位,所以乘以million后,有13个3仍然是精确的,如果计算million*1000*mint超出15位得到的数值就不精确了。因此使用浮点数时要注意计算精度的问题。


下期见!