浮点Denormals微不足道,但争议

Denormal浮点数和渐进下溢IEEE浮点标准是一个被低估了的特性。双精度denormals非常小,他们很少数值意义重大,但单精度denormals可以在范围影响一些不起眼的计算。历史上,逐渐下溢在委员会审议,被证明是很有争议的开发标准。

内容

规格化的浮点数

我以前的文章主要是关于规格化的浮点数。回想一下,标准化的数字可以表示为$ $ x = (1 + f)下午\ \ cdot 2 e ^ $ $分数尾数f满足美元$ $ 0 \ leq < 1 $ $ $ f美元必须可表示的二进制使用最多52位双精度和23位单精度。指数e是一个整数的美元区间$ $ -e_{马克斯}< e \ leq e_{马克斯}$ $,$ e_{马克斯}= 1023双精度和美元e_{马克斯}= 127美元为单精度。f是一个美元的有限性限制精度。e是一个美元的有限性限制范围。任何不符合这些限制的数据必须由那些近似。

浮点数格式

双精度浮点数存储在一个64位的词,对$ f $ 52位,e美元的11位,1位数字的符号。e美元的符号是通过存储$ e + e_{马克斯}$,在$ 1 $和$ 2 ^{11}2美元。单精度浮点数存储在一个32位的字,对$ f $ 23位,8位,e,美元和1位数量的迹象。e美元的符号是通过存储$ e + e_{马克斯}$,在$ 1 $和$ 2 ^{8}2美元。指数的两个极端值,0和1,特殊的情况。0表示denormal浮点数,今天的文章的主题。一起的,分数为零,表示无穷,或。和所有的人,连同一个非零部分,表示不是一个数字,或

floatgui

我的程序floatgui,可以在这里显示正数的分布在一个浮点变量参数系统模型。参数t美元指定用于存储的比特数f美元,所以2 ^ t f美元是一个整数。参数$ e_{分钟}$和$ e_{马克斯}指定美元指数的范围。

差距在零附近

如果你仔细观察的输出floatgui所示之前的帖子您将看到一个差距在零附近。这是对数图中尤为明显,因为对数分布永远不可能达到零。这是输出参数略有不同,t = 3美元,美元e_{分钟}= 5美元,美元e_{马克斯}= 2美元。Howrever,差距在零附近填满了绿色。这些都是denormals。

放大

放大这些玩具浮点数的比例不到一半。现在你可以看到个人绿色denormals——在这种情况下有八人。

Denormal浮点数

Denormal浮点数基本上是在标准化数字舍入错误下溢附近的限制,最小正浮点数,这是2美元^ {-e_{马克斯}+ 1}$。他们是等距的,间距eps *最小正浮点数。零自然是作为最小的denormal。假设xy是两个不同的浮点数接近,但比,最小正浮点数。很可能,他们的区别,x - y,小于最小正浮点数。例如,在小floatgui系统如上图所示,每股收益= 1/8最小正浮点数= 1/32。的数量x = 6/128y = 5/128之间1/321/16,所以他们都是高于下溢。但x - y = 1/128下溢生产绿色denormals之一。在IEEE标准之前,甚至在今天的系统,不符合标准,底流只会被设置为零。所以有可能有MATLAB表达式
x = = y
是假的,而表达
x - y = = 0
是真实的。在机器下溢冲到零,除零是致命的,这段代码可以产生一个部门由零和崩溃。
如果x ~ = y z = 1 / (x - y);结束
当然,denormals也可以由乘法和除法之间产生一个结果eps *最小正浮点数最小正浮点数。在这些范围是小数
格式紧凑的格式e(eps *最小正浮点数最小正浮点数][eps (“单一”)*最小正浮点数(“单一”)最小正浮点数(“单一”)]
ans 2.2251 = 4.9407 e - 324 e - 308和1.1755 = 1.4013 e-45 38吗

Denormal格式

Denormal浮点数存储没有隐含的领先一点,$ $ x = f \ \点cdot 2 ^ {-emax + 1} $ $分数f满足美元$ $ 0 \ leq < 1 $ $和$ f表示美元二进制使用52位双精度和23位单取消。注意,零denormal自然发生。当你看一个双精度denormal十六进制格式这种情况是相当清楚的。最右边的13个十六进制字符的52位分数。第一位是符号。前三个十六进制字符的其他12位都是零,因为他们代表了偏见指数,这是零,因为emax和美元指数的偏见被选出的互为补充。这是最大的两个和两个非零最小双精度denormals。
格式十六进制[(1-eps);(1 - 2 * eps);2 *每股收益;每股收益;0]*最小正浮点数格式e
000 = 000 fffffffffffff ffffffffffffe 0000000000000002 0000000000000001 0000000000000002岁= 2.225073858507201 e - 308 4.940656458412465 9.881312916824931 2.225073858507200 e - 308 e - 324 e - 324 0
情况与单精度稍微复杂一点,因为23不是4的倍数。分数和单精度浮点数的指数字段——正常或denormal分享部分第三字符的十六进制显示;偏差指数得到一点和前三位的23位分数得到其他三个。这是最大的两个和两个最小非零denormals单精度。
格式十六进制e =每股收益(“单一”);r =最小正浮点数(“单一”);[(单电子);(1 - 2 * e);2 * e;e;0]* r格式e
= 007 fffff 007 ffffe 00000002 00000001 00000002岁1.1755 = 1.1755 38吗38吗2.8026 e-45 1.4013 e-45 0
认为这样的情况。规格化的浮点数立即的权利最小正浮点数之间,最小正浮点数2 *最小正浮点数是等距的间距eps *最小正浮点数。如果正如许多数字,只有相同的间距,放在左边的最小正浮点数之间的差距,他们填写零。这些是denormals。他们需要一个稍微不同的格式来表示和稍微不同的硬件来处理。

IEEE浮点委员会

IEEE浮点委员会成立于1977年在硅谷。参与者包括代表的半导体制造商发展成为基础的芯片的个人电脑今天如此熟悉。正如我在以前的文章,该委员会是一个非凡的竞争对手之间的合作。Velvel卡亨在委员会会议是最突出的人物。他不仅是数学和计算机科学的教授来自加州大学伯克利分校,他也是英特尔和顾问参与他们的数学协处理器的设计,8087。Velvel的一些学生,不仅从校园,而且那些已经毕业的,现在的一些参与公司工作,参与。建议标准,由卡亨,他的一个学生在伯克利,杰罗姆•Coonen和伯克利分校客座教授,哈罗德·斯通;草案,反映了英特尔设计和委员会的大部分工作的基础。经常委员会开会时,通常在晚上在会议室公司旧金山半岛。也有会议在奥斯汀,德克萨斯州,在东海岸。会议通常持续到午夜之后。 Membership was based on regular attendance. I was personally involved only when I was visiting Stanford, so I was not an official member. But I do remember telling a colleague from Sweden who was coming to the western United States for the first time that there were three sites that he had to be sure to see: the Grand Canyon, Las Vegas, and the IEEE Floating Point Committee.

争议

的denormals;起草委员会的大多数新事物。Velvel表示,他已经尝试了多伦多大学,但那是所有。标准的努力旨在规范现有的实践,没有引入新的设计。此外,实施denormals reguire额外的硬件,和额外的晶体管是一种宝贵的资源在新兴的设计。一些专家声称包括denormals会降低所有浮点运算。从12月一个数学家,玛丽·佩恩,领导了反对;。12月想要一个更宽松的标准,接受浮点VAX已经可用。VAX格式相似,但不一样的;建议。它不包括denormals。讨论持续了几年。 Letters of support for KCS from Don Knuth and Jim Wilkinson did not settle the matter. Finally, DEC engaged G. W. (Pete) Stewart, from the University of Maryland. In what must have been a surprise to DEC, Pete also said he thought that the KCS proposal was a good idea. Eventually the entire committee voted to accept a revised version.

Denormals今天

Denormal浮点数仍然是孩子在今天的浮点家庭不必要的步骤。我认为这是公平地说,数值分析社区未能做出有力的论点的重要性。的确,他们做一些浮点误差分析更加优雅。但随着震级约10美元^{-308}$双精度denormals很少数值明显在实际计算。只有单精度denormals 10美元左右^{-38}$是潜在的重要的。MATLAB本身之外,我们遇到处理器,IEEE浮点数的格式,但不符合754标准时处理。这些处理器通常下溢刷新到零,所以我们可以期待不同的数值结果对任何可能通常产生denormals计算。今天我们仍然看到处理器,处理与微码denormals或软件。执行时间的MATLAB程序遇到denormals可以显著降低等处理器。维基百科页面denormals有宏设置陷阱处理器冲洗下溢在C或Java程序为零。 I hate to think what might happen to MATLAB Mex files with such macros. Kids, don't try this at home.

引用

威廉·卡亨主页。查尔斯•遣散费采访浮点的老人,回忆IEEE计算机,1998年2月20日。维基百科页面,Denormal数量

发表与MATLAB®R2014a
|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。