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

IEEE 754规格化浮点数所能表示的最大值和最小值文章目录 IEEE754 标准 IEEE754 标准浮点数格式 IEEE754 浮点数格式 浮点数的最大值和最小值浮点数的最大绝对值浮点数的最小绝对值浮点数的最大值短浮点数所能表示的最大规格化正数 短浮点数所能表示的最大规格化负数 浮点数的最小值短浮点数所能表示的最小规格化正数 短浮点数所能表示的最小规格化负数 长浮点数同理 IEEE754 标准 IEEE754 标准浮点数格式 阶码用移码表示移码 阶码真值 偏置值阶码真值 移码 偏置值偏置值的公式为 移码 这里的移码看作无符号

刚开始自己不明白最大绝对值 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浮点数格式:

类型 数符 阶码 尾数数值 总位数 偏置值
十六进制 十进制
短浮点数 1 8 23 32 7FH 127
长浮点数 1 11 52 64 3FFH 1023
临时浮点数 1 15 64 80 3FFFH 16383

浮点数的最大值和最小值

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204844.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:24
下一篇 2026年3月19日 下午7:24


相关推荐

  • 迭代器Python_Python进阶

    迭代器Python_Python进阶迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。可迭代对象我们已经知道可以对l

    2022年7月30日
    7
  • virsh详解_virsh怎么读

    virsh详解_virsh怎么读来个表情包表达我此时的心情manvirshvirsh[options]…[<command_string>]virsh[options]…<command>[args…]options:-c|–connect=URIhypervisorconnectionURI…

    2022年8月11日
    8
  • 什么是Java多态?如何实现Java多态?[通俗易懂]

    什么是Java多态?如何实现Java多态?[通俗易懂]java多态这个概念在同学们深入学习java的时候就会被提出,很多同学并不知道是什么意思,如何实现。今天小千就来给大家介绍一下什么是java多态和java如何实现多态。什么是多态?指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamicbinding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用:消除类型之间的耦合关系。现实中,关于多态的例子不胜

    2022年7月8日
    43
  • 几种范数的简单介绍

    几种范数的简单介绍什么是范数 我们知道距离的定义是一个宽泛的概念 只要满足非负 自反 三角不等式就可以称之为距离 范数是一种强化了的距离概念 它在定义上比距离多了一条数乘的运算法则 有时候为了便于理解 我们可以把范数当作距离来理解 在数学上 范数包括向量范数和矩阵范数 向量范数表征向量空间中向量的大小 矩阵范数表征矩阵引起变化的大小 一种非严密的解释就是 对应向量范数 向量空间中的向量都是有大小的 这个大小如何度量

    2026年3月4日
    3
  • mysql乐观锁使用

    mysql乐观锁使用mysql 乐观锁使用一次关于乐观锁的使用记录 仅供参考反例 缺陷 本质上根据 id 更新 版本锁字段 version 字段没有起效没有加事务回滚正例 dao 方法 sql 写法乐观锁扩展

    2026年3月26日
    2
  • python–随机生成汉字、数字「建议收藏」

    python–随机生成汉字、数字「建议收藏」一、随机生成汉字:第一种方法:Unicode码在unicode码中,汉字的范围是(0x4E00,9FBF)这个方法比较简单,但是有个小问题,unicode码中收录了2万多个汉字,包含很多生僻的

    2022年7月5日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号