详细解说单精度浮点数float取值范围
结论
先说结论, float能表示范围为:± 3.4e38
- 最大正数PosMax 3.402e38
- 最小正数PosMin 1.175e-38
- 最大负数NegMax -1.175-38
- 最小负数NegMin -3.402e38
先来回顾一下float 的表达公式以及存储范围
表达公式
在IEEE标准中,float的表达公式为:
其中决定正负号,为尾数,为基数or进制,为指数
在实际应用中,编译器主要用二进制,所以公式可简化为
采用二进制存储后,的整数部分恒定为1,可以不用储存,我们将需要放入内存的小数部分称为,则
存入内存时需要加上偏置值()并且转为二进制,存入内存时的指数记为, 则
存储范围
再回顾一下float (32bit) 的取值范围
-
s--------e----------m
-
1位-----8位--------23位
最大正数
二进制表达float的最大值为
-
0 | 11111110 |11111111111111111111111 // 0x7f7fffff
-
s-|-----e----|------------m----------
- 符号位为0 (正数)
- = 11111110 即十进制的254,所以 (注意:当全为1即=255时,这时表示的是无穷(inf)或者不是一个数字)
- = 1111....1111 (23个1), 所以
最后计算最大值,二进制的表达式为:
十进制的表达式为:
最小正数
二进制表达float的最小正数为
-
0 | 00000001 |00000000000000000000000 // 0x00800000
-
s-|-----e----|------------m----------
- 符号位为0 (正数)
- = 00000001 即十进制的1,所以
- = 0000...000 (23个0), 所以
最后二进制的表达式为:
十进制的表达式为:
最大负数
二进制表达float的最大负数为
-
1 | 00000001 |00000000000000000000000 // 0x80800000
-
s-|-----e----|------------m----------
同理可得二进制的表达式为:
最小负数
二进制表达float的最小负数为
-
1 | 11111110 |11111111111111111111111 // 0xff7fffff
-
s-|-----e----|------------m----------
同理可得二进制的表达式为:
non-numbers 特殊值
最后说一下特殊值inf 、 NaN
IEEE 754 标准规定,当指数 的所有位都为 1 时,即= 255, 所表示的值为特殊值, 情况如下
当 = 11111111时:
- 的二进制位都为 0,则表示无穷大(inf),决定是正无穷还是负无穷
- = 0, 正无穷
- = 1, 负无穷
- 的二进制位不全为 0,则表示 NaN(Not a Number),也即这是一个无效的数字,或者该数字未经初始化
参考
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggfia
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13