黑马程序员技术交流社区

标题: Java 中float,double的取值范围是如何计算得出的? [打印本页]

作者: hi2hcs    时间: 2014-8-28 23:57
标题: Java 中float,double的取值范围是如何计算得出的?
小弟一直对Java 中float(-3.4E38 ~ 3.4E38),double(-1.7E308~ 1.7E308)的取值范围是如何计算得出的比较纠结,盼哪位大神帮解下惑。。。谢过!
作者: 潘多拉    时间: 2014-8-29 02:38
一个字节八位,两个字节十六位,四个字节三十二位,慢慢算吧
作者: fantacyleo    时间: 2014-8-29 21:27
这个说起来有点复杂。我建议初学者无需纠结,把它当作既定事实就行了
作者: xiongjin1991    时间: 2016-3-29 02:27
它们底层的存储结构不同
float:
1bit(符号位)
8bits(指数位)
23bits(尾数位)
double:
1bit(符号位)
11bits(指数位)
52bits(尾数位)
取值范围可想而知要比,整型大得多。了解就行了,没什么好纠结的
作者: zlb820    时间: 2016-6-23 16:45
在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。
这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)

取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2