深入理解计算机系统 2.4.2 IEEE浮点表示详细讲解

定义

IEEE浮点标准用以下公式表示\(V = (-1)^s * M * 2^E\)

  • 符号(sign):s决定这书是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理 。
  • 尾数(significand):M是一个二进制小数,它的范围是\(1 ~ 2-\varepsilon\),或者是\(0 ~ 1-\varepsilon\)。
  • 阶码(exponent):E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。

将浮点数的位表示划分为三哥字段,分别对这些值进行编码:

  • 一个单独的符号位s直接编码符号s。
  • k位的解码字段\(exp=e_k-1…e_1e_0\)编码阶码E。
  • n为小数字段\(frac=f_k-1…f_1f_0\),但是编码出来的值也依赖于解码字段的值是否为0.

在单精度浮点格式(C语言中的float中),s、exp和frac字段分别为1位、k=8位和n=23位,得到一个32位的表示。在双精度浮点格式(C语言中的double)中,s、exp和frac字段非别为1位、k=11位和n=52位,得到一个64位的表示。

avatar

给定位表示,根据exp的值,呗编码的值可以分成三种不同的情况(最后一种情况有两个变种)。

avatar

情况1:规格化的值

当exp的为模式既不全为0(数值0),也不全为1(单精度数值为255,双精度数值为2047)时,都属于这种情况。在这种情况中,阶码字段被解释为以偏置(biased)形式表示的有符号整数。阶码的值是E=e-Bias,其中e是无符号数,其位表示为\(e_k-1…e_1e_0\),而Bias是一个等于\(2^{k-1} - 1\)(单精度是127,双精度是1023)的偏置值。由此阐述指数的取值范围,杜宇单季度是-126+127,而双精度是-1022+1023。

小数字段frac被解释为描述小数值f,其中\( 0 \leq f < 1\),其二进制表示为\( 0.f_{n-1}…f_1f_0\),也就是二进制小数点在最高有效位的左边。尾数定义为M = 1 + f。有时,这种方式也叫做隐含的以1开头的(implied leading 1)表示,因为我们可以把M看成一个二进制表达式为\( 1.f_{n-1}…f_1f_0\)的数字。既然我们总是能够调整阶码E,是的尾数M在范围\( 1 \leq M < 2\)之中(假设没有溢出),那么这种表示方法是一种轻松获得一个额外精度位的技巧。既然第一位总是等于1,那么我们就不需要显示的表示它。

情况2:非规格化的值

当阶码域全为0时,所表示的书是非格式化形式。在这种情况下,阶码值是E=1-Bias,而尾数的值是M=f,也就是小数字段的值,不包含隐含的靠头1。

使阶码为1-Bias而不是简单的-Bias似乎是违反直觉的。这种方式提供了一种从非格式化值平滑转换到规格化值的方法。

非格式化数有两个用途。首先他们提供了一种表示数值0的方法,因为使用规格化数,我们必须总是使\( M \geq 1\),因此我们不能表示0。实际上,+0.0的浮点表示的位模式为全0:符号位是0,阶码字段全为0(表名是一个非规格化值),而小数域也全为0,这就得到M=f=0
。当符号位为1,而其它域全为0时,我们得到值-0.0.根据IEEE的浮点格式,值+0.0和-0.0在某些方面呗认为是不同的,而在其他方面是相同的。
非规格化书的另外一个功能是表示那些非常接近于0.0的数。他们提供了一种属性,称为逐渐溢出(gradual underflow),其中,可能的数值分布均匀的接近于0.0。

情况3:特殊值

最后一类数值是当指阶码全为1的时候出现的。当小数域全为0时,得到的值表示无穷,当s=0是\(+\infty\),或者当s=1时是\(-\infty\)。当我们把两个非常大的数相乘,或者除以零时,无穷能够表示溢出的结果。当小数域为非零时,结果值被称为"NaN",即"不是一个数(Not a Number)"的缩写。一些运算的结果不能是实数或无穷,就会返回这样的NaN的值,比如当计算\(\sqrt-1\)或\(\infty-\infty\)时。

示例

上面的书上有,下面的书上没有,我用例子详细讲解一下理论如何套上实际。

假如一个基于IEEE浮点个事的5位浮点表示,有1个符号位、2个阶码位(k=2)和两个小数位(n=2)。阶码偏置量\(2^{2-1}-1=1\)。

下表中列举了这个5位浮点表示的全部非负取值范围。使用下面的条件,填写表格中的空白项:

e:假设阶码字段是一个无符号证书所表示的值。

E:偏置之后的阶码值。

\(2^E\):阶码的权重。

f:小数值。

M:尾数的值。

\(2^E\) * M:该数(未规约的)小数值

V:该数规约后的小数值。

十进制:该数的十进制表示。

写出\(2E\)、f、M、\(2E\) * M和V的值,要么是整数(如果可能的话),要么是形如\(\frac{x}{y}\)的小数,这里y是2的幂。标注"-"的条目不用填。

eE\(2^E\)fM\(2^E\) * MV十进制
0 00 00
0 00 01
0 00 10
0 00 11
0 01 00
0 01 01
0 01 10
0 01 11
0 10 00
0 10 01
0 10 10
0 10 11
0 11 00-------
0 11 01-------
0 11 10-------
0 11 11-------

1 非规格化的值

很明显在0 00 11之前都是非结构化数据,用0 00 00来举例,所以根据定义以及题目

  • k=2
  • n=2
  • \(Bias=2^{k-1} - 1=1\)
  • e(exp)=00
  • E=1-Bias=0
  • \(2^E=1\)
  • M=f(frac)=0
  • \(2^E * M=0\)
  • \(V = (-1)^s * M * 2^E=0\)
  • 十进制=0

所以更新上表如下

eE\(2^E\)fM\(2^E\) * MV十进制
0 00 00001\(\frac{0}{4}\)\(\frac{0}{4}\)\(\frac{0}{4}\)00

这里比较重要的是f和M的值,为什么是分数\(\frac{0}{4}\)呢,原文提到***小数字段frac被解释为描述小数值f,其中\( 0 \leq f < 1\),其二进制表示为\( 0.f_{n-1}…f_1f_0\),也就是二进制小数点在最高有效位的左边。***因为他在小数点右边,且n=2,所以
\(f=0 * 2^{-1}+0 * 2^{-2}\)(这部分内容时二进制数的位模式,这个自行补习)

2 规格化的值

从0 01 00开始到0 11 00之前都是规格化的值,我用0 01 00举例,所以根据定义

  • k=2
  • n=2
  • \(Bias=2^{k-1} - 1=1\)
  • e=01(十进制)=1(二进制)
  • E=e-Bias=0
  • \(2^E=1\)
  • \(f=0 * 2^{-1}+0 * 2^{-2}=0\)
  • \(M=1+f=\frac{4}{4}\)
  • \(2^E * M = 1\)
  • \(V = (-1)^s * M * 2^E=1\)
  • 十进制=1
eE\(2^E\)fM\(2^E\) * MV十进制
0 01 00101\(\frac{0}{4}\)\(\frac{4}{4}\)\(\frac{4}{4}\)11

3 特殊值

从0 11 00开始到结束是特殊值,根据定义

eE\(2^E\)fM\(2^E\) * MV十进制
0 11 00------\(\infty\)-
0 11 01------NaN-
0 11 10------NaN-
0 11 11------NaN-

全部结果如下

eE\(2^E\)fM\(2^E\) * MV十进制
0 00 00001\(\frac{0}{4}\)\(\frac{0}{4}\)\(\frac{0}{4}\)
0 00 01001\(\frac{1}{4}\)\(\frac{1}{4}\)\(\frac{1}{4}\)
0 00 10001\(\frac{2}{4}\)\(\frac{2}{4}\)\(\frac{2}{4}\)
0 00 11001\(\frac{3}{4}\)\(\frac{3}{4}\)\(\frac{3}{4}\)
0 01 00101\(\frac{0}{4}\)\(\frac{4}{4}\)\(\frac{4}{4}\)
0 01 01101\(\frac{1}{4}\)\(\frac{5}{4}\)\(\frac{5}{4}\)
0 01 10101\(\frac{2}{4}\)\(\frac{6}{4}\)\(\frac{6}{4}\)
0 01 11101\(\frac{3}{4}\)\(\frac{7}{4}\)\(\frac{7}{4}\)
0 10 00212\(\frac{0}{4}\)\(\frac{4}{4}\)\(\frac{8}{4}\)
0 10 01212\(\frac{1}{4}\)\(\frac{5}{4}\)\(\frac{10}{4}\)
0 10 10212\(\frac{2}{4}\)\(\frac{6}{4}\)\(\frac{12}{4}\)
0 10 11212\(\frac{3}{4}\)\(\frac{7}{4}\)\(\frac{14}{4}\)
0 11 00------\(\infty\)-
0 11 01------NaN-
0 11 10------NaN-
0 11 11------NaN-
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Contents Preface i 1 Introduction 1 1.1 Information isBits inContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Programs areTranslated byOtherPrograms intoDifferent Forms . . . . . . . . . . . . . . . 3 1.3 ItPays toUnderstandHowCompilation SystemsWork . . . . . . . . . . . . . . . . . . . . 4 1.4 Processors Read and Interpret Instructions Stored in Memory . . . . . . . . . . . . . . . . . 5 1.4.1 HardwareOrganization of aSystem . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4.2 Running the helloProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 CachesMatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 StorageDevicesFormaHierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7 TheOperating SystemManages theHardware . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.7.1 Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.7.2 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7.3 Virtual Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7.4 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.8 SystemsCommunicateWithOtherSystemsUsingNetworks . . . . . . . . . . . . . . . . . 16 1.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 I Program Structure and Execution 19 2 Representing and Manipulating Information 21 2.1 Information Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.1 HexadecimalNotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.1.2 Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3 4 CONTENTS 2.1.3 DataSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1.4 Addres

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值