gpt4 book ai didi

floating-point - 为什么IEEE 754标准使用127偏差?

转载 作者:行者123 更新时间:2023-12-04 04:32:53 25 4
gpt4 key购买 nike

当使用整数的多余表示时,我使用2n-1的偏差。但是,IEEE 754标准改为使用2n-1-1。

我能想到的唯一好处是更大的正射程。为什么做出该决定还有其他原因吗?

最佳答案

原因是无穷大/NaN和渐进式下溢。

如果使用指数同时显示整数(n> = 0)和分数(n <0)值,则您的问题是2 ^ 0 = 1需要一个指数。因此,剩余范围是奇数,您可以选择为分数或整数选择更大范围的方法。
对于单精度,我们有256个值,没有0指数的255个。
现在,IEEE754为特殊值保留了最高指数(255):+-无穷大和NaN(不是数字)表示失败。因此,我们又回到偶数(两边均为254,整数和小数),但偏差较小。

第二个原因是逐渐下溢。该标准声明通常所有数字都已标准化,这意味着指数表示第一位的位置。为了增加位数,通常不设置而是假定第一位(隐藏位):指数位之后的第一位是数字的第二位,第一位始终是二进制数1。
如果执行归一化,则会遇到无法编码为零的问题,即使将零编码为特殊值,也会影响数值精度。 + -Infinity(最高指数)清楚地表明出了点问题,但是对于太小的数字,下溢到零是完全正常的,因此很容易被忽略为可能的问题。因此,标准的设计者Kahan决定应引入非规范化的数字或次正规量,并且它们应包含1/MAX_FLOAT。

编辑:艾伦问,如果您将零编码为特殊值,为什么“数字精度受到阻碍”。我最好将其表述为“数值精度仍然受到阻碍”。实际上,这是历史DEC VAX浮点格式的实现。如果原始位编码中的指数字段为0,则认为该字段为零。例如,我现在认为32位格式在GPU中仍然很流行。

X 00000000 XXXXXXXXXXXXXXXXXXXXXXX

在这种情况下,可以完全忽略右侧尾数字段的内容,并且通常用零填充。左侧的符号字段可能是有效的,区分了正常零和“负零”(您可以通过-1.0/0.0之类的东西获得负零或四舍五入负数)。

相比之下,IEEE 754的逐渐下溢和次法线确实使用了尾数字段。仅有的
X 00000000 00000000000000000000000

是零。所有其他位组合都是有效的,甚至更实用,如果结果下溢,则会警告您。
那有什么意义呢?

考虑不同的数字
A 0 00000009 10010101111001111111111  
B 0 00000009 10010101111100001010000

它们是有效的浮点成员,很小,但仍然有限。但是正如您所看到的,前11位是相同的。如果现在减去A-B或B-A,则第一个有效位会离开较低的指数范围,因此没有逐渐下溢的结果为.... 0。
所以A!= B但A-B = 0。无数的人陷入了这个陷阱,可以假设他们从未意识到它。与乘法或除法相同:您需要添加或减去指数,并且如果它低于下限阈值:0。并且您知道:0 * everything =0。您可能拥有STXYZ,并且一旦一个子乘积为0,结果为即使一个完全有效甚至巨大的数字是正确的结果,也为0。应该说,由于舍入而无法完全避免这些异常情况,但是随着逐渐的下溢,它们变得很少见。极少。

关于floating-point - 为什么IEEE 754标准使用127偏差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com