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

本文详细解析了IEEE754标准下浮点数的最大值和最小值计算方法,通过确定最大和最小阶码真值及尾数部分来计算浮点数的极限值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

IEEE 754标准

IEEE 754标准浮点数格式:

在这里插入图片描述

  • 阶码用移码表示

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

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

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

  • 移码(这里的移码看作无符号数)的表示范围为:0∼2n−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∼28−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

根据偏置值公式可以算出:28−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×2127{\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)×2127{\large {\color{Red} \left ( 2-2^{-23} \right )\times 2^{127} }}(2223)×2127

浮点数的最小绝对值

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

继续拿短浮点数举例。

上面已经求出短浮点数移码的表示范围,短浮点数得阶码占8{ {\color{Green} 8}}8位,根据移码公式可以算出:0∼28−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)×2127{ {\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)×2127{ {\color{Red} -\left ( 2-2^{-23} \right )\times 2^{127} }}(2223)×2127

要分析计算一个浮点数最大值最小值,首先需要理解计算机系统中浮点数表示方法。根据IEEE 754标准,一个浮点数由三部分组成:符号位、阶码。阶码通常使用偏移表示法(excess或bias),而尾则可能是规格化或非规格化的形式。 参考资源链接:[计算机组成:习题答案详解与浮点数表示](https://wenku.csdn.net/doc/6fn52woo39) 以IEEE 754单精度浮点数为例,阶码共有8位,偏移值为127;尾共有23位,加上隐藏的最高位1,实际上有24位表示最大值发生在阶码全为1(除去偏移),尾全为1时;最小值则发生在阶码全为0,尾全为0时(对于非规格化)。 1. 计算最大值:全为1的阶码(255-127=128,即二进制的***)对应的十进制值为2^7,尾全为1(二进制的1.111...111)表示1+(1-2^-23)。因此,最大值为2^(128-127) * (2-2^-23) = 2 * (1-2^-23)。 2. 计算最小正:非规格化下,阶码为全0(不计入偏移),尾全为0,但是由于存在隐含的最高位1,所以最小正实际上是2^-126 * 2^-23 = 2^-149。 3. 计算最小负浮点数的最小负是正的相反,即-2^-149。 这里的关键是理解阶码的偏移表示规格化与非规格化。具体到不同的计算机系统架构,可能会有不同的表示方法,例如32位单精度浮点数64位双精度浮点数的阶码就不同。建议参考《计算机组成:习题答案详解与浮点数表示》中的第3.8题第3.9题,这部分资料详细讨论了阶码的计算过程以及最大值最小值的确定方法,能够帮助你更深入地理解浮点数表示以及如何在实际系统中应用这些知识。 参考资源链接:[计算机组成:习题答案详解与浮点数表示](https://wenku.csdn.net/doc/6fn52woo39)
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@赵士杰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值