《计算机组成与体系结构(原书第4版)》 —2.5.4 IEEE-754浮点标准

举报
华章计算机 发表于 2019/11/19 16:17:47 2019/11/19
【摘要】 本节书摘来自华章计算机《计算机组成与体系结构(原书第4版)》一书中第2章,第2.5.4节,作者是[美] 琳达·纳尔(Linda Null)朱莉娅·洛博(Julia Lobur)宾夕法尼亚州立大学,张 钢 魏继增 李雪威天津大学 李春阁 何 颖天津大学仁爱学院 译。

2.5.4 IEEE-754浮点标准

我们在本节中使用的浮点模型是为了简化和理解概念而设计的。可以扩展这个模型为任何我们想要的位数。直到20世纪80年代,这种扩展都是纯粹的任意的,导致在各个制造商的系统中有许多不兼容的表示。在1985年,IEEE公布了单精度和双精度浮点数标准。该标准官方称为IEEE-754(1985)。IEEE-754标准不仅定义了二进制浮点表示,而且指定了基本操作、异常条件、转换和算术。另一个标准是IEEE 854—1987,它提供了类似的十进制算术规范。2008年,IEEE修订了754标准,并成为人们所熟知的IEEE 754—2008。它沿习了754的单精度和双精度,并增加了对十进制算术和格式的支持,取代了754和854。我们只讨论浮点数的单精度和双精度表示。

IEEE-754单精度标准在8位指数上使用偏移值为127的移码。有效数假定在小数点左边隐含一个1,总共是23位。隐含的1被称为隐藏位或隐藏1,并允许实际有效数为24(24=23+1)位。包括符号位在内,总数字长为32位, 图2-2 IEEE-754单精度浮点表示如图2-2所示。

image.png

我们前面提到IEEE-754规格化规则有一个例外。因为这个标准假定在小数点的左边有1个隐含的1,有效数中的首位确实可以为零。例如,数字5.5=101.12=.10112×23。IEEE-754假定在小数点左侧有1个隐含的1,因此表示5.5为1.0112×22。因为1是隐含的,有效数为011,不是以1开头的。

表2-4显示了几个单精度浮点数表示,包括一些特殊的数。应该注意,0不是直接用给定格式表示的,因为在有效数中要求一位隐藏位。因此,0是使用指数全为0以及有效数全为0表示的特殊值。IEEE-754允许-0和+0,尽管它们是相等的值。因此,当比较浮点数为0时,程序员应该谨慎。

表2-4 IEEE-754单精度浮点数的一些例子 

image.png

当指数为255时,表示的值为无穷大(其有一个零有效数)或“非数”(其具有一个非零有效数)。“非数”或NaN用于表示不是实数的值(例如,负数的平方根)或者作为错误指示符(如“除零”错误)。

根据IEEE-754标准,大多数数值被规格化并使其有效数有一个隐式前导1(假定在小数点左边)。另一个重要的约定是当指数是零时,有效数不为零。这表示一个没有隐藏位的非规格化数字。

单精度浮点数可表示的最大值(暂时不考虑符号)是2127×1.111111111111111111111112(称为MAX值)。我们不能使用全1的指数,因为那是为NaN(不是数值的特殊值)保留的。我们可以表示的最小数字为2-127×.000000000000000000000012(称为MIN)。我们可以使用全0的指数(这意味着数字是非规范的),因为有效数是非零值(并且表示为2-23)。由于前面的特殊值和有限的位数,单精度浮点数不能表示4个数字范围:小于-MAX的负数(负溢出),大于-MIN的负数(负下溢),小于+MIN的正数(正下溢),和大于+MAX的正数(正溢出)。

双精度数字是使用由11位指数和52位有效数组成的64位有符号数。移码是1023。数值范围可以表示为图2-3所示的IEEE双精度模型。当指数为2047时隐含为NaN。零和无穷大的表示对应于单精度模型。

image.png

图2-3 IEEE-754双精度数的范围

由于在性能上会有一些代价,大多数浮点处理单元(FPU)只使用64位模型,因此只需要设计和实现一组专用电路。

几乎每个最近设计的计算机系统都采用了IEEE-754浮点模型。不幸的是,在这个标准颁布之前,很多大型计算机系统已经建立了自己的浮点系统。把久负盛誉的架构转变到较新的系统已经花费了几十年的时间,如IBM大型机现在支持自己的传统浮点系统和IEEE-754。然而,在1998年之前,IBM系统一直在使用源于1964年System/360使用的相同的浮点运算架构。预计这两个系统将继续得到支持,因为在这些系统上运行着大量旧的软件。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。