Advertisement

IEEE标准:浮点数的表示

阅读量:

目录

    • 一,表示形式
    • 二,浮点数格式
    • 三,计算 e、m

一,表示形式

从直观上看来看待的话,浮点数确实是由一串0和1组成的位序列. IEEE标准则采用了三元组{S,E,M}来描述数值N的结构,如图所示:

在这里插入图片描述

N的实际值n由下列式子表示:

在这里插入图片描述

★ n,s,e,m分别对应实际数值N,S,E,M,其中这些变量仅仅是二进制位序列的一部分。
★ S(sign)用来表示数值N的符号信息,对应的符号值s根据n的正负情况确定:当n为正数时,s=0;当n为负数时,s=1.
★ E(exponent)代表数值N中的指数部分,位于符号位S与其尾数部分M之间的一系列二进制位,其取值范围可为正可为负.
★ M(mantissa)是数值N的有效数字部分,即所谓的"有效数字"或"系数",它精确地存储在数据中最末尾的位置上,通常也被称为"小数".

二,浮点数格式

IEEE 754标准中包含了三种浮点数格式:单精度型、双精度型以及扩展精度型。其中前两种直接对应C语言中的float与double类型以及FORTRAN中的real与double类型。由于篇幅限制本篇文章仅介绍单精度型与双精度型的相关内容

在这里插入图片描述

★ 双精度:N共64位,其中S占1位,E占11位,M占52位。

在这里插入图片描述

M虽然是23位或者52位,但它们只是表示小数点之后的二进制位数,也就是说,假定 M为“010110011…”, 在二进制数值上其实是“.010110011…”。而事实上,标准规定小数点左边还有一个隐含位,这个隐含位绝大多数情况下是1,N对应的n非常小的时候是0,比如小于 2^(-126)(32位单精度浮点数)。总之,隐含位算是赚来了一位精度,于是M对应的m最后结果可能是"m=1.010110011…”或者“m=0.010110011…”

三,计算 e、m

首先将提到令初学者头疼的“规格化(normalized)”、“非规格化(denormalized)”。请牢记这句话:规格化与否全看指数E!
下面分三种情况讨论E,并分别计算e和m:
1、规格化:当E的二进制位不全为0,也不全为1时,N为规格化形式。此时e被解释为表示偏置(biased)形式的整数,e值计算公式如下图所示:

在这里插入图片描述

上图中,
|E| 表示为 E 的二进制序列表示的整数值,
如 E 为 "1000 ̃ ̃ ̃ ̃ ̃ ̃ ̃",
则有 |E|=132
计算得 e = |E| -  ⁄ ⁄ ⁄ ⁄ ⁄ ⁄ =5
k 表示的是二进制序列中的位数,
对于单精度浮点数来说,
在这种情况 k 等于8,
则偏移量(bias)为 127
而对于双精度浮点数而言,
则是当 k 等于 11 时,
偏移量(bias)提升到 1\text{,}⁰\text{²}³

此时m的计算公式如下图所示:

在这里插入图片描述

规范规定,在这种情况下,默认的小数点左侧有一个隐含的‘1’;因此m等于绝对值符号内的数值:m = |{^{}_{i}A}_{\text{尾}}|(其中{^{}_{i}A}_{\text{尾}}表示尾数)。例如当M等于二进制数‘b_2b_3…b_n’时,则m = |{^{}_{i}A}_{\text{尾}}|的具体计算结果可以根据具体数值进行推导

在这种情况下(指数E的所有二进制位均为零),数值N被定义为非规格化形式;其对应的指数e和尾数m均采用最简单的计算方式

在这里插入图片描述

注意,在这种情况下,默认的小数点左侧有一个零。

在这里插入图片描述

观察 N 列自上而下排列时的二进制表示呈现均匀递增趋势,并且每次增量仅包含最低有效位的变化。这并非巧合而是巧妙设计所致。考察最大非规格数的情况后发现其对应于 M 全部置 1、E 全部置 0的状态。于是我们求出最大非规格数值如下:

在这里插入图片描述

上面公式中h代表M的二进制位数(例如范例中h=3)。值得注意的是,在该公式右边的第一项即为最小规格数值(如范例中为8/512);而第二项则是最小非规格数值(如范例中为1/512),即该浮点数值所能表示出的最小正数值。
观察m列可知,在此情况下所有规格化数值均为1.xxxx的形式(其中x代表小数部分),这里"1."是隐含了最高有效位;而非规格化数值则隐含了最低有效位"0."。
在n列上可以看到,在从最低阶向更高阶变化的过程中每级之间的增量均为固定的1/512;而在从非规格化状态过渡至规格化状态时的变化同样是连续均匀的(增量仍保持为1/512)。这正是由于非规格化状态下指数e满足e = 1 - bias这一条件所导致的结果;这也是一种巧妙的设计。
进一步观察发现,在进入更高阶的状态后每级之间的增量逐渐增大;由此可知该浮点数值域并非均匀分布。

全部评论 (0)

还没有任何评论哟~