在阅读Goldberg的What Every Computer Scientist Should Know About Floating-Point Arithmetic时,我发现了一些我不太了解的东西。
他指出,具有非规格化数字是好的,因为x = y
当且仅当x-y==0
。然后他举了一个例子:
如果(x!= y)则z = 1 /(x-y)
现在,假设x-y
是非正规数。这样1/(x-y)
很有可能会变成inf
。如果我们一开始就没有非正规化的数字,那么结果是一样的。
即使我要执行除法并避免产生inf
的结果,如果我们没有非规范化的数字,也将更加方便:
if (x-y) then z = 1/(x-y) // here, we know that z is not inf
我无法用非规范化的数字实现相同的效果,因为x-y
可能不是零,而是非规范化的数字,然后1/(x-y)
的除法将导致inf
。因此,在这里,非规范化的数字实际上会造成麻烦。
为什么且仅当x=y
时拥有x-y=0
才是好特性?
非规格化数字有用吗?
答案 0 :(得分:2)
William Kahan on gradual underflow的一些点:
本文并没有声称渐进式下溢在每种情况下都比较好,但已证明总体上是优选的。
在您给出此示例时:
if (x-y) then z = 1/(x-y) // here, we know that z is not inf
具有受限制的实用程序,因为在if (x-y) then z = 4/(x-y)
中不是这样。