1、Java浮点数
在Java中,浮点数取值范围的表示不像整数那么简单。对于int来说,他的
规则标准
是:一个int类型变量占32位,最高位为符号位,剩下31位表示值,所以取值范围
。而浮点数有另一套标准,
IEEE 754
。
2、float结构
我们以float为例子,一个float数占4字节32位,分为三部分:符号位,指数位,尾数位。
符号位(S):1bit | 指数位(E):8bit | 尾数位(M):23bit |
- 符号位:0表示正数,1表示负数;
-
指数位:格式为:
,值范围
。 - 尾数位:形式为1.M或0.M。其中当E=0时,取1.M,称为正规形式,当E!= 0时,取0.M,称为非正规形式。
3、取值范围
正规形式float值 =
,非正规形式float值 =
根据上式,很容易就能计算出float
取值范围
,能取到区间内的近似值。float
最小绝对值
除了正规与非正规形式,浮点数还包含多个特殊值,具体形式如下:
符号 | 指数部分 | 指数部分-127 | 尾数部分 |
小数部分的 最高有效位 |
形式 |
1 | 255 | 128 | 非0 | 没有 | NaN |
1 | 255 | 128 | 0 | 没有 | 负无穷 |
1 | 1~254 | -126~127 | 任意 | 1 | 正规形式(负数) |
1 | 0 | -127 | 非0 | 0 | 非正规形式(负数) |
1 | 0 | -127 | 0 | 没有 | 负0 |
0 | 0 | -127 | 0 | 没有 | 正0 |
0 | 0 | -127 | 非0 | 0 | 非正规形式(正数) |
0 | 1~254 | -126~127 | 任意 | 1 | 非正规形式(负数) |
0 | 255 | 128 | 0 | 没有 | 正无穷 |
0 | 255 | 128 | 非0 | 没有 | NaN |
4.浮点数double
符号位(S):1bit | 指数位(E):11bit | 尾数为(M):52bit |
浮点数double使用的规则和float相似,不过每个部分位数与float不同。正规double值 =
5.精度
尾数代表的是2的负数次方,使用二进制的科学计数法近似表示十进制科学计数法。对于float来说,尾数最小值
只能近似表示
,所以只能精确表示6~7位小数。对于double来说,尾数最小值
只能近似表示
,只能精确表示15~16位小数。
参考:
https://blog.csdn.net/shenziheng1/article/details/79471340
https://blog.csdn.net/a327369238/article/details/52354811/#commentBox
https://baike.baidu.com/item/IEEE%20754/3869922?fromtitle=IEEE754标准&fromid=10427270