每当我搜索术语“非正规数”或“非正规数”时,我只会找到如何检测它们并将它们四舍五入为零的方法。显然,没有人真正喜欢它们,因为与它们打交道会导致性能下降。
然而,它们无处不在。为什么?如果是为了精度,我会说你需要一个更大的浮点数,或者改变你的操作顺序,这样你就可以避免非常小的中间值。我发现很难相信一点点额外的精度真的值得宝贵的时钟周期。
人们仍然使用非正规数有什么好的理由吗?如果没有重要的理由需要非正规数,为什么要实现它们呢?只是为了符合 IEEE754 标准?)
最佳答案
简而言之,因为逐渐下溢保留了一些有用的数学恒等式(例如 x-y == 0 意味着 x == y)。关于渐进下溢为何有用的一些解释:
http://grouper.ieee.org/groups/754/faq.html#underflow
http://www.cs.berkeley.edu/~wkahan/ARITH_17U.pdf
是的,在某些情况下,由于糟糕的应用程序设计会遇到下溢,正确的操作是修复应用程序。在其他情况下,在逐渐下溢的情况下正常工作的应用程序将在突然下溢下失败。
此外,
关于floating-point - 什么时候非范数真正有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10583321/