0
点赞
收藏
分享

微信扫一扫

javascript浮点数介绍

文章目录

介绍

单精度浮点数32位,双精度浮点数64位。其中单精度由1位符号位,8位指数位,23位尾数位组成。双精度由1位符号位,11位指数位,52位尾数位组成。

图示

以64位浮点数为例,sign表示符号位用S表示,exponent表示指数位用E表示,mantissa表示尾数用M表示。

浮点数

浮点数形式

尾数之前其实还有一个隐藏位。尾数部分其实是小数部分,.xxxxx是52位二进制小数,如果浮点数形式是规格化隐藏位就是1,非规格化就是0。

用s、e、m分别代表符号位、指数位、尾数位的实际值,n代表浮点数,公式为:
n = ( − 1 ) s × m × 2 e (1) n = (-1)^s \times m \times 2^e \tag{1} n=(1)s×m×2e(1)

特殊数值

特殊数值可以表示正负无穷大以及NaN

符号位S(1)指数位E(11)尾数位M(52)结果
0全是1全是0Infinity
1全是1全是0-Infinity
0或1全是1不全是0NaN

规格化

当尾数M全为0时最小,当尾数全为1时最大。所以
1.0 ≤ ( m = 1. M ) ≤ 2 − 2 − 52 (2) 1.0 \leq (m = 1.M) \leq 2 - 2^{-52} \tag{2} 1.0(m=1.M)2252(2)

因为指数E不全为0也不全为1,所以
1 ≤ E ≤ 2 11 − 2 (3) 1 \leq E \leq 2^{11} - 2 \tag{3} 1E2112(3)
指数的实际值 e 被解释为偏置形式的数,偏移量用bias表示
{ b i a s = 2 E 的 宽 度 − 1 − 1 e = E − b i a s (4) \lbrace^{e = E - bias}_{bias = 2^{E的宽度-1} - 1} \tag{4} {bias=2E11e=Ebias(4)
所以偏移量bias = 2^(11 - 1) - 1 = 1023,所以 e = E - 1023
n = ( − 1 ) S × 1. M × 2 E − 1023 (5) n = (-1)^S \times 1.M \times 2^{E - 1023} \tag{5} n=(1)S×1.M×2E1023(5)
不算符号位,n的最大值是 (2 - 2^(-52)) * 2^1023 也就是最大浮点数

最小值是1.0 * 2^(-1022)。

非规格化

当尾数M全为0时最小,当尾数全为1时最大。所以
0 ≤ ( m = 0. M ) ≤ 1 − 2 − 52 (6) 0 \leq (m = 0.M) \leq 1 - 2^{-52} \tag{6} 0(m=0.M)1252(6)
指数E全是0,e的偏置形式为
e = 1 − b i a s = − 1022 (7) e = 1 - bias = -1022 \tag{7} e=1bias=1022(7)

n = ( − 1 ) S × 0. M × 2 − 1022 (8) n = (-1)^S \times 0.M \times 2^{-1022} \tag{8} n=(1)S×0.M×21022(8)

当M全是0时,n等于0

当M不全是0时,不算符号位,n的最小值是 2^(-52) * 2^(-1022) 也就是最小浮点数。最大值是 (1 - 2^(-52)) * 2^(-1022)

总结

浮点数形式指数E(11)尾数M(52)浮点数值范围(不考虑符号位)
非规格化全是0全是000
非规格化全是0不全为0公式(8)2(-52)*2(-1022) ~ (1 - 2^(-52)) * 2^(-1022)
规格化不全为0也不全为1任意值公式(5)2^(-1022) ~ (2 - 2^(-52)) * 2^1023
特殊数值全是1全是0无穷大无穷大
特殊数值全是1不全为0NaNNaN
举报

相关推荐

0 条评论