IEEE 754规格化浮点数所能表示的最大值和最小值

刚开始自己不明白最大绝对值 2- 是怎么来的,记录下

IEEE 754标准

IEEE 754标准浮点数格式:

在这里插入图片描述

  • 阶码用移码表示

  • 移码=阶码真值+偏置值

  • 阶码真值=移码-偏置值

  • 偏置值的公式为: 2 n − 1 − 1 {\large {\color{Green} 2^{n-1}-1}} 2n11

  • 移码(这里的移码看作无符号数)的表示范围为: 0 ∼ 2 n − 1 {\large {\color{Green}0\sim 2^{n}-1}} 02n1

  • 尾数用原码表示

  • 隐含最高数位1

  • 阶码全1和阶码全0用作特殊用途

IEEE 754浮点数格式:

类型数符阶码尾数数值总位数偏置值
十六进制十进制
短浮点数1823327FH127
长浮点数11152643FFH1023
临时浮点数11564803FFFH16383

浮点数的最大值和最小值

IEEE 754规格化浮点数的最大值和最小值,可以先根据最大绝对值,改变符号位即可

浮点数的最大绝对值

浮点数规格化的阶码决定了数值的大小,因此找最大绝对值,就需要首先确认最大的阶码真值,然后再确定尾数部分最大

因此找最大绝对值需要确定最大阶码和确定最大尾数

我们拿短浮点数(单精度、float型)举例(长浮点数同理)。

已经知道 阶 码 真 值 = 移 码 − 偏 偏 置 值 { {\color{Purple} 阶码真值=移码-偏偏置值} } = ,因此, 最 大 的 阶 码 = 最 大 的 移 码 − 偏 置 值 { {\color{Purple} 最大的阶码=最大的移码-偏置值} } =

短浮点数得阶码占 8 {\large {\color{Green} 8}} 8位,根据移码公式可以算出: 0 ∼ 2 8 − 1 的 取 值 范 围 为 0 ∼ 255 {{\color{Green} 0 \sim 2^{8}-1}{ \color{Purple} 的取值范围为} {\color{Green} 0 \sim 255}} 02810255

由于全1和全0用作特殊用途,所以我们能取得最大的移码是 254 { {\color{Green} 254}} 254

根据偏置值公式可以算出: 2 8 − 1 − 1 { {\color{Green} 2^{8-1}-1}} 2811,偏置值为 127 { {\color{Green} 127}} 127

由公式 阶 码 真 值 = 移 码 − 偏 偏 置 值 {{\color{Purple} 阶码真值=移码-偏偏置值} } =可以求出最大阶码真值能取得 254 − 127 = 127 {\large {\color{Green} 254-127=127}} 254127=127。求出最大阶码,再求最大尾数部分

短浮点数的尾数部分占 23 {\large {\color{Green} 23}} 23位,我们把 23 {\large {\color{Green} 23}} 23数值位全部取1就是最大值,再加上隐含的最高位1,得出: 1.1111   1111   1111   1111   1111   111 {\large {\color{Green} 1.1111\ 1111\ 1111\ 1111\ 1111\ 111} } 1.1111 1111 1111 1111 1111 111

组合到一块就是: 1.1111   1111   1111   1111   1111   111 × 2 127 {\large {\color{Green} 1.1111\ 1111\ 1111\ 1111\ 1111\ 111} \times {\color{Orange} 2^{127}} } 1.1111 1111 1111 1111 1111 111×2127

但是这么多位1存在很麻烦,我们化简一下: 1.1111   1111   1111   1111   1111   111 = 2 − 0.0000   0000   0000   0000   0000   001 {\large {\color{Green} 1.1111\ 1111\ 1111\ 1111\ 1111\ 111} = {\color{Orange} 2-0.0000\ 0000\ 0000\ 0000\ 0000\ 001} } 1.1111 1111 1111 1111 1111 111=20.0000 0000 0000 0000 0000 001

最后得到: ( 2 − 2 − 23 ) × 2 127 {\large {\color{Red} \left ( 2-2^{-23} \right )\times 2^{127} }} (2223)×2127

浮点数的最小绝对值

和最大绝对值一样,只需要让阶码真值最小,尾数部分最小即可

继续拿短浮点数举例。

上面已经求出短浮点数移码的表示范围,短浮点数得阶码占 8 { {\color{Green} 8}} 8位,根据移码公式可以算出: 0 ∼ 2 8 − 1 的 取 值 范 围 为 0 ∼ 255 {{\color{Green}0\sim 2^{8}-1}{\color{Purple} 的取值范围为} {\color{Green}0\sim255}} 02810255,偏置值为 127 {{\color{Green} 127}} 127

由于移码的全1和全0用作特殊用途,所以我们能取得最小的移码是 1 {{\color{Green} 1}} 1

由公式 阶 码 真 值 = 移 码 − 偏 偏 置 值 {{\color{Purple} 阶码真值=移码-偏偏置值} } =可以求出最大阶码真值能取得 1 − 127 = − 126 { {\color{Green} 1-127=-126}} 1127=126。求出最小阶码,再求最小尾数部分

短浮点数的尾数部分占 23 { {\color{Green} 23}} 23位,我们把 23 { {\color{Green} 23}} 23数值位全部取0就是最小值,再加上隐含的最高位1,得出: 1.0000   0000   0000   0000   0000   000 { {\color{Green} 1.0000\ 0000\ 0000\ 0000\ 0000\ 000} } 1.0000 0000 0000 0000 0000 000

最后得到: 1.0 × 2 − 126 { {\color{Red} 1.0\times 2^{-126} }} 1.0×2126

浮点数的最大值

将绝对值改变符号即可

短浮点数所能表示的最大规格化正数:

( 2 − 2 − 23 ) × 2 127 { {\color{Red} \left ( 2-2^{-23} \right )\times 2^{127} }} (2223)×2127

短浮点数所能表示的最大规格化负数:

− 1.0 × 2 − 126 {{\color{Red} -1.0\times 2^{-126} }} 1.0×2126

浮点数的最小值

将绝对值改变符号即可

短浮点数所能表示的最小规格化正数:

1.0 × 2 − 126 { {\color{Red} 1.0\times 2^{-126} }} 1.0×2126

短浮点数所能表示的最小规格化负数:

− ( 2 − 2 − 23 ) × 2 127 { {\color{Red} -\left ( 2-2^{-23} \right )\times 2^{127} }} (2223)×2127

  • 152
    点赞
  • 419
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@赵士杰

如果对你有用,可以进行打赏,感

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值