1. float 与double都是浮点型数据类型。
2. 常量值1.3333325的数据类型是float还是double,如何显示说明数据类型?
小数一般默认为是double类型。
显示说明浮点类型的方法是在数值后加f或lf, 比如 1.3f 是浮点型, 1.3lf 是double。
3.float与double的区别:
(1)使用内存不同, float 使用4个字节,double使用8个字节
(2)计算速度不同,double比float慢得多
(3)表示的数值精度不同,double精度更高
4.float进行运算,出现“大数吃小数”
下面的代码运行结果为多少?
float f = 600.0 + 0.000023; printf("f =%f ", f);
答案是 f = 600.000000, 不是600.000023
因为浮点型是以指数形式表示的,如下图所示,
s是符号位,f是有效位,e是指数位,s+f+e共占32bit
浮点型进行运算时,会先保证指数对齐(以大数为准),再运算。
比如 0.5 + 0.125 = (-1)0x1.0x2-1 + (-1)0x1.0x2-3 = (-1)0x1.0x2-1 + (-1)0x0.01x2-1 = (-1)0x1.01x2-1
可见小数会发生向右移位。因为有效位有24位,当大数是小数的224(16,777,216)倍时,移动24位会导致小数的有效位为0,运算结果和大数一样,即大数吃小数。
5.???
下面的运算结果怎么解释?
float f = 600.0 + 0.000023; printf("f =%f ", f); // 600.000000
printf("600.0 + 0.000023 = %f ", 600.0 + 0.000023); // 600.000023