【详细解说】单精度浮点数float取值范围

结论

先说结论, float能表示范围为:± 3.4e38

  • 最大正数PosMax图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL 3.402e38
  • 最小正数PosMin图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL 1.175e-38
  • 最大负数NegMax图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL -1.175-38
  • 最小负数NegMin图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL -3.402e38

先来回顾一下float 的表达公式以及存储范围

表达公式

在IEEE标准中,float的表达公式为:

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

其中图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL决定正负号,图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL为尾数,图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL为基数or进制,图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL为指数

在实际应用中,编译器主要用二进制,所以公式可简化为

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

采用二进制存储后,图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL的整数部分恒定为1,可以不用储存,我们将需要放入内存的小数部分称为图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL,则图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL存入内存时需要加上偏置值(图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL)并且转为二进制,存入内存时的指数记为图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL, 则图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

存储范围

再回顾一下float (32bit) 的取值范围

s--------e----------m1位-----8位--------23位

最大正数

二进制表达float的最大值为

0 | 11111110 |11111111111111111111111 // 0x7f7fffffs-|-----e----|------------m----------
  • 符号位图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL为0 (正数)
  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 11111110 即十进制的254,所以图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL(注意:当图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL全为1即图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL=255时,这时表示的是无穷(inf)或者不是一个数字)
  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 1111….1111 (23个1), 所以图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

最后计算最大值,二进制的表达式为:

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

十进制的表达式为:

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

图片[27] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

最小正数

二进制表达float的最小正数为

0 | 00000001 |00000000000000000000000 // 0x00800000s-|-----e----|------------m----------
  • 符号位图片[28] - 【详细解说】单精度浮点数float取值范围 - MaxSSL为0 (正数)
  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 00000001 即十进制的1,所以图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL
  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 0000…000(23个0), 所以图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

最后二进制的表达式为:

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

十进制的表达式为:

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

图片[35] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

最大负数

二进制表达float的最大负数为

1 | 00000001 |00000000000000000000000 // 0x80800000s-|-----e----|------------m----------

同理可得二进制的表达式为:

图片[28] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

图片[37] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

最小负数

二进制表达float的最小负数为

1 | 11111110 |11111111111111111111111 // 0xff7fffffs-|-----e----|------------m----------

同理可得二进制的表达式为:

图片[28] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

图片[39] - 【详细解说】单精度浮点数float取值范围 - MaxSSL

non-numbers 特殊值

最后说一下特殊值inf 、 NaN

IEEE 754 标准规定,当指数 图片[28] - 【详细解说】单精度浮点数float取值范围 - MaxSSL的所有位都为 1 时,即图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 255, 所表示的值为特殊值, 情况如下

图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 11111111时:

  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL的二进制位都为 0,则表示无穷大(inf),图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL决定是正无穷还是负无穷
    • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 0, 正无穷
    • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL= 1, 负无穷
  • 图片[1] - 【详细解说】单精度浮点数float取值范围 - MaxSSL的二进制位不全为 0,则表示 NaN(Not a Number),也即这是一个无效的数字,或者该数字未经初始化

参考

单精度浮点数的取值,表示以及相关

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享