float 与 double

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

原文地址:https://www.cnblogs.com/blackandwhite/p/15048244.html