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

beat365官方网站手机版 admin 2025-12-14 02:59:36 阅读 1081

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

IEEE 754标准

IEEE 754标准浮点数格式:

阶码用移码表示

移码=阶码真值+偏置值

阶码真值=移码-偏置值

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

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

尾数用原码表示

隐含最高数位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}}0∼28−1的取值范围为0∼255

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

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

由公式阶码真值=移码−偏偏置值{{\color{Purple} 阶码真值=移码-偏偏置值} }阶码真值=移码−偏偏置值可以求出最大阶码真值能取得254−127=127{\large {\color{Green} 254-127=127}}254−127=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=2−0.0000 0000 0000 0000 0000 001

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

浮点数的最小绝对值

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

继续拿短浮点数举例。

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

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

由公式阶码真值=移码−偏偏置值{{\color{Purple} 阶码真值=移码-偏偏置值} }阶码真值=移码−偏偏置值可以求出最大阶码真值能取得1−127=−126{ {\color{Green} 1-127=-126}}1−127=−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×2−126

浮点数的最大值

将绝对值改变符号即可

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

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

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

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

浮点数的最小值

将绝对值改变符号即可

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

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

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

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

相关文章