早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Java中Double的疑问double是64为这个无争议也就是说double最多能表示2^64个数字!这句话对吧?0.1和0.2和0.3是三个不同的数把!就需要占2^64个中的三个了吧!那double最大正数1.7976931348623157E308小数咱先

题目详情
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).它由一个起始位和一个小数部分组成.