java吧 关注:1,254,931贴子:12,745,433
  • 11回复贴,共1

关于java中的浮点数据类型的有效位数

只看楼主收藏回复

学java基础的时候,教材上边说:float类型占4个字节,有效位数7位。double类型占8个字节有效位数15位。
请问这个有效位数是什么意思呀?
还有为什么2.0-1.1算不准呢?


来自Android客户端1楼2014-11-29 23:05回复
    float 1.000000
    double 1.00000000000000
    可以打出这样的数字


    2楼2014-11-30 00:08
    收起回复
      浮点 就是 不精确的。
      float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
      double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。


      IP属地:上海来自Android客户端3楼2014-11-30 00:36
      收起回复
        关于有效位 楼上说的是错的。
        首先你要理解 浮点数的保存是以 指数的方式 也就是说 把一个数转为 a X e^n 这样的方式 然后保存a和n的值,
        a是一个1.X的小数。
        a和n分别需要占用一定的字节来保存 且有一定的范围。
        以double为例 15位有效位 是指a的值最多是15位有效位
        即double的取值范围为 -1.79769313486232 e308 和 +1.79769313486232 e308 之间
        更多详情 请参考 IEEE 754


        IP属地:湖北4楼2014-11-30 09:03
        收起回复