Java中float的取值范围
(2011-07-29 01:05:04)
标签:
杂谈
格式化表示
java中的浮点数批准的事IEEE Standard 754 Floating Point
Numbers规范,该规范的规范能够参看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是23bit54.163xi.com的小数局部,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的佳能550D话ve.veveenglish.com,那么最大表示为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.可能说渴望的混杂是指“广度”上的混杂度时,
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。