Java 中 float 的取值范围

转载 2004年11月02日 10:53:00


规格化表示
    java中的浮点数采用的是IEEE Standard 754 Floating Point Numbers标准,该标准的规范可以参考
http://blog.csdn.net/treeroot/articles/94752.aspx.
    float占用4个字节,和int是一样,也就是32bit.
    第1个bit表示符号,0表示正数,1表示负数,这个很好理解,不用多管.
    第2-9个bit表示指数,一共8位(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量.这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127.
    剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性).
    最后结果是:(-1)^(sign) * 1.f * 2^(exponent)
    这里:sign是符号位,f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数)
    2^(-126) ~~ 2(1-2^(-24)) * 2^127
    这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定.
   
非规格化表示
    当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0.
    取值位0.f * 2^(-126),表示范围为 2^(-149)~~ (1-2^(-23)) * 2^(-126) 这里没有考虑符号.这里为什么是-126而不是-127? 如果是-127的话,那么最大表示为
2^(-127)-2^(-149),很显然2^(-127) ~~2^(-126) 就没法表示了.
 

其他特殊表示
    1.当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0.
    2.指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷.
    3.指数部分全1,小数部分不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN.
 
结论
    可以看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE.

关于float/double的取值范围和表示! - C语言

编程论坛 → 开发语言 → 『 C语言论坛 』 → 请教float的取值范围! 1 11111111 尾数的23位不全为0: 表示不是数值  1 11111111 000000000000...
  • wsccdsn
  • wsccdsn
  • 2012年11月13日 21:00
  • 6633

Java中float的取值范围为什么是那么大?

float占用4个字节,和int是一样,也就是32bit.       第1个bit表示符号,0表示正数,1表示负数,这个很好理解,不用多管.       第2-9个bit表示指数,一共8为(可以...
  • oYouHuo
  • oYouHuo
  • 2016年02月22日 13:38
  • 901

关于 float 类型取值范围的疑问

关于C++的float取值范围 悬赏分:10 - 解决时间:2009-8-4 17:46 float为四个字节,最大的数为2的32次方,为什么会是3.4E-38~3.4E38(大约为2的64次方),这...
  • nokiacfg
  • nokiacfg
  • 2009年08月26日 14:54
  • 802

Java中float/double取值范围与精度

Java浮点数浮点数结构  要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个...
  • a327369238
  • a327369238
  • 2016年08月29日 21:10
  • 25896

MYSQL中支持的数据类型及取值范围

最近公司准备把一些小应用的数据库放在MySQL上,所以这2天准备熟悉下MySQL的基本操作,在学习的过程中创建表的时候遇到了些数据类型不对的问题,以前一直认为MySQL的应该跟ORACLE在SQL语句...
  • ihrthk
  • ihrthk
  • 2012年04月28日 19:13
  • 3785

float的范围和有效数字怎么算出来的?

首先说一下:  范围是3.4E-38 ——3.4E+38,可提供7位有效数字。  上述这两个量都是近似值,各个编译器不太一样的。  下面我就将标准值是怎么定义的,和你说一下:  这个比较复...
  • a4454541115
  • a4454541115
  • 2016年07月31日 16:00
  • 5243

12. Float和Double取值范围

Float  :  3.4E+10^-38 ~ 3.4E+10^38 Double :  1.7E+10^-308~1.7E+10^308
  • hackeraaa
  • hackeraaa
  • 2016年03月18日 23:10
  • 195

Java中float的取值范围

http://blog.csdn.net/treeroot/article/details/95071 规格化表示        java中的浮点数采用的事IEEE Standard 754 ...
  • u012587637
  • u012587637
  • 2014年12月30日 09:15
  • 1457

Java中为什么float型最大值大于long型?

最为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是为什么4个字节的float型的最大值会大于long型的最大值呢?        我们都知道,...
  • u011240877
  • u011240877
  • 2015年08月17日 12:01
  • 2269

java中float的取值范围

http://www.233.com/JAVA/Instructs/060530/095611815.html
  • ginwafts
  • ginwafts
  • 2016年08月02日 14:26
  • 464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 中 float 的取值范围
举报原因:
原因补充:

(最多只允许输入30个字)