C++每日一课(七)

浮点数
浮点数,表示可以带小数部分的数字,它们可以表示的数值很大,如果用long无法表示时可以用浮点数来表示
比如3.1415926这样的数字使用浮点数进行存储
在计算机中这样的值分成两部分进行存储
1.一部分用来表示值(表示数值部分)
2.一部分用来对值进行放大或缩小(移动小数点的位置)
对于数字3.1415926与31.415926它们除了小数点的位置不一样外,其它的是相同的




浮点数写法
1.23
234234.56
0.000012
9.0
注意 最后一个就算小数部分是0,也必须要有小数点这样来表示它是一个浮点数而不是一个整数


第二种表示浮点数的方式叫做E表示法
1.23E1表示1.23*10
E1指的是10的1次方


5E5 这种写法等价于 5.0E+05
注意指数中可以有正负号的它用来表示缩放(正号可以省略),数字部分也用正负号表示实际的数是正数还是负数


C++中的三种浮点数
float、double、long double
它些是按他们可以表示的有效数位和允许的指数最小范围来描述的。


有效位:是数字中有意义的位
对于C或C++对于有效位数的要求是,float至少32位,double至少是48位且不小于float, long double至少和double一致
这三种类型的指数范围至少是-37到37


可以从cfloat或float.h文件中指到系统指定的限制


/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++中的浮点型
*/


#include <iostream>


int main() {
	using namespace std;
	cout.setf(ios::fixed, ios_base::floatfield);


	float f = 10.0 / 3.0;	//保留6位精度
	double d = 10.0 / 3.0;	//保留15位精度
	
	const float m = 1.0e6;


	cout << "f = " << f << endl;
	cout << "m = " << m << endl;
	cout << "f*m= " << m*f << endl;
	cout << "10*m*f = " << 10 * m*f << endl;


	cout << "d = " << d << endl;
	cout << "m*d = " << m*d << endl;
	cout << endl;


	system("pause");
	return 0;
}



f = 3.333333
m = 1000000.000000
f*m= 3333333.250000
10*m*f = 33333332.000000
d = 3.333333
m*d = 3333333.333333


请按任意键继续. . .




通常来说cout在输出的时候会把结尾多余的0删除掉
在上面调用了cout.setf后则会覆盖掉这种特性
从上可以看出,float至少是有6位有效位,double至少是有13位的有效位


浮点常量
在程中写一个浮点的常量的时候,程序是如何去判断要存储为什么类型?
在默认情况下程序会存储为double类型
如果希望存储为float类型,需要在常量后面加上F/f的后缀,对于long double则可以使用l/L


浮点数的优缺点:
优点:
1.浮点数可以表示整数之间的数
2.由于使用缩放因子因而它是可以表示很大范围的数的
缺点:
浮点数的运算速度通常比整数要低并且精度也要低


/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++中的浮点型
*/


#include <iostream>


int main() {


	using namespace std;
	float a = 1.23E22f;
	float b = a + 0.1f;
	cout << "a = " << a << endl;
	cout << "b-a=" << b - a << endl;


	system("pause");
	return 0;
}



a = 1.23e+22
b-a=0
请按任意键继续. . .


按常量来推算 b = a+0.1,那么b-a应该输出的值是0.1,但是上面程序输出的是0
原因是a这个浮点数的精度上已经完全超过了float类型的精度位,float类型只能表示数字中的前6位或前7位,后面的位修改是不会有任何变化的

猜你喜欢

转载自blog.csdn.net/advent86/article/details/73706313