浮点数的数据类型有3种,它们是:● float:单精度浮点数● double:双精度浮点数● long double:扩展精度浮点数
这⾥的术语“精度”是指尾数中的位数。上述数据类型的精度按从上到下的顺序逐步增加,float在尾数中的位数最少,long double的位数最多。注意精度只确定尾数中的位数。某⼀类型表⽰的数值的取值范围主要由指数的可能范围确定。
C++的ANSI标准并没有描述精度和数值范围,所以这些类型的精度和数值范围就由编译器决定,编译器通常会最⼤限度地利⽤计算机提供的浮点数功能。⼀般情况下,long double类型提供的精度⼤于等于double类型,double类型提供的精度⼤于等于float类型。
通常,float类型提供7位精度,double类型提供15位精度,long double类型提供19位精度,但double类型和long double类型在⼏个编译器上的精度是相同的。除了精度有所增加之外,double类型和long double类型的取值范围也在扩⼤。在PC上,浮点数类型表⽰的取值范围如表2-11所⽰。表2-11 类 型floatdouble
显然,这些类型都可以表⽰0,但不能表⽰0和正负范围中下限之间的值,所以这些下限是⾮0值中最⼩的值。
默认情况下,浮点字⾯量是double类型,下⾯就看看如何定义这种类型的变量。可以使⽤关键字double指定浮点数变量,如下⾯的语句所⽰:
double inches_to_mm=25.4;
这个语句把变量inches_to_mm声明为double类型,并把它的值初始化为25.4。在声明浮点数变量时,也可以使⽤const,在需要浮点数常量时,就可以这么做。如果希望修改变量的值,声明语句应如下所⽰:const double inches_to_mm=25.4; //Define a constant conversion factor
如果不需要double变量提供的精度和取值范围,可以选择使⽤关键字float来声明浮点数变量。例如:float pi = 3.14159f;
这个语句定义了⼀个变量pi,并将其初始值设置为3.14159。字⾯量尾部的f表⽰这是⼀个float类型。如果没有f,该字⾯量就是double类型,这不会出什么问题,但编译器会发出⼀个警告消息。还可以使⽤⼤写字母F来表⽰浮点数字⾯量是float类型。
要指定类型为long double的字⾯量,应在数值的最后加上⼤写或⼩写字母L。⽤下⾯的语句就可以声明并初始化这种类型的变量:long double root2 = 1.4142135623730950488L; //Square root of 2
使⽤浮点数变量是很简单的,但没有使⽤这种变量的经验终究不太好,所以下⾯举⼀个这⽅⾯的例⼦。程序⽰例2.5—— 浮点数的算术运算
假定要构建⼀个圆形的池塘,其中喂养平均长度为9英⼨的20条鱼。通过研究发现,必须保证该池塘的表⾯积为2平⽅英尺,才能确保每条鱼有6英⼨长。本例需要确定池塘的直径,以确保鱼有⾜够的空间。下⾯就是实现过程://Program 2.5 –Figuring for fish in floating point#include 精度(位数)715取值范围(+或–) 1.2×10–38到3.4×10382.2×10–308到1.8×10308 double fish_count=20.0; double ave_length = 9.0/12.0; //Average length of fish in feetdouble pond_area =0.0;double pond_diameter =0.0; const double fish_factor=2.0/0.5; //Area per unit length of fishconst double pi=3.14159265; //Calculate the required surface area pond_area = fish_count *ave_length * fish_factor; //Calculate the pond diameter from the areapond_diameter = 2.0 * sqrt ( pond_area / pi ); cout << endl <<\" Pond diameter required is \"<< pond_diameter<< \" feet.\"; cout << endl;return 0;} 这个例⼦的输出如下所⽰: Pond diameter required is 8.74039 feet例⼦的说明 ⾸先声明要在计算中使⽤的6个变量:double fish_count=20.0; double ave_length = 9.0/12.0; //Average length of fish in feetdouble pond_area =0.0;double pond_diameter =0.0; const double fish_factor=2.0/0.5; //Area per unit length of fishconst double pi=3.14159265; 注意使⽤⼀个常量表达式来指定fish_factor的值。可以使⽤任意表达式来⽣成合适类型的结果,以定义变量的初始化值。这⾥把fish_factor和pi声明为const,因为不希望修改它们的值。使⽤下⾯的语句获得池塘所需要的⾯积:pond_area = fish_count *ave_length * fish_factor; fish_count和ave_length的乘积给出了所有鱼的总长,把这个值与fish_factor相乘,就得到了需要的⾯积。 圆的⾯积可以由公式pr2得到,其中r是半径。所以,可以计算出池塘的半径,即⾯积除以p,再开⽅。直径是半径的两倍,整个计算过程由下⾯的语句完成: pond_diameter = 2.0 * sqrt ( pond_area / pi ); 使⽤⼀个在标准头⽂件cmath中声明的函数来获得平⽅根。sqrt()函数返回函数名后⾯的括号中表达式的值的平⽅根。在本例中,因为表达式的值是double类型,所以返回值的类型是double,⽽返回的float值的平⽅根就是float类型。cmath头⽂件包含了许多其他标准库数值函数的声明,包括三⾓函数和双曲线函数、对数函数、指数函数和幂函数等。第8章将详细解释函数,包括如何定义⾃⼰的函数。 因篇幅问题不能全部显示,请点此查看更多更全内容