DAY3 浮点数存储问题

        Java浮点类型分两类,单精度(float)的存储占4字节,与整形(int)相同,而双精度(double)的存储占8字节,与长整形(long)相同。但float的精度并不比int类型的精度高,其原因在于浮点数存储方式。

      浮点数是通过科学计数法来存储的,无论是单精度还是双精度在存储中都分为三个部分:

  1. 符号位(Sign) : 0代表正,1代表为负
  2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
  3. 尾数部分(Mantissa):尾数部分 ,表示有效数字

      比如十进制的3.0,二进制就是0011.0 就可以写成(-1)^0*1.1*2^1 
      比如十进制的-3.0,二进制就是-0011.0 就可以写成(-1)^1*1.1*2^1 
      float类型有一个符号位(S),有8个指数位(E),和23个有效数字位(M)
      double类型有一个符号位(S),有11个指数位(E),和52个有效数字位(M)

      而计算机中用二进制表示科学记数法,所以不能精确表示某些10进制小数,所以浮点数相较于整形丢失了一些精度。

   

猜你喜欢

转载自blog.csdn.net/qq_41170231/article/details/88722628