【java吧】Java中Double的疑问double是64为这个无争议也就是说...

发布时间:2021-04-03 20:26:18

Java 中Double的疑问double是64为这个无争议也就是说double最多能表示2^64个数字!这句话对吧?0.1和0.2和0.3是三个不同的数把!就需要占2^64个中的三个了吧!那double最大正数1.7976931348623157E308 小数咱先不说光说1E308吧!就是1X10^308把!这都几位了?还有小数部分!早就超出位数了啊! 数学

网友回答

【答案】 你的理解是错误的,double型是64位,但是表示方法和整数是不一样的.你用整数的想法去理解浮点数,肯定会出错啦.给你看下我做过的笔记,你理解下:
   存储布局就是一个浮点数在内存中如何表示.我们知道浮点数有float和double,前者是4个字节也就是32位,后者是8个字节也就是64位.布局分别为:
    符号 指数 小数部分 偏移附加(bias)
    单精度 1[31] 8[30-23] 23[22-00] 127
    双精度 1[63] 11[62-52] 52[51-00] 1023
  
    中括号内为位的编号范围,外面为该部分所占有的位的数量.偏移附加不属于位表示的内容,是一个常量,稍后解释.
    符号只有一位:0-表示正数 1-表示负数
    指数部分:用指数部分的值(8位/11位,unsigned)的值 减去 偏移附加 得到该数实际的指数 例如值为200,实际指数为73=200-127.对于双精度的double来说常量bias=1023
    尾数:尾数是什么?对于一个科学计数法来讲,形式象这样的 L.M×BE,那么这个L.M就是所谓的尾数(mantisa).它由一个起始位和一个小数部分组成.
以上问题属网友观点,不代表本站立场,仅供参考!