每当我搜索"非正规数"或"非正规数"这个术语时,我只会找到如何检测它们并将它们舍入为零的方法.显然,没有人真正喜欢它们,因为与它们打交道会导致性能下降.
然而,它们在各地实施.为什么?如果它是精确的,我会说你需要一个更大的浮动,或者改变你的操作顺序,这样你就可以避免非常小的中间值.我发现很难相信这一点额外的精度真的值得宝贵的时钟周期.
有没有什么好的理由让人们仍然使用非正规数?如果没有明显的理由有非正规数字,为什么要实现它们呢?只是符合IEEE754标准吗?)
简而言之,因为逐渐下溢保留了一些有用的数学恒等式(例如xy == 0意味着x == y).关于为什么逐渐下溢可能有用的一些解释:
http://grouper.ieee.org/groups/754/faq.html#underflow
http://www.cs.berkeley.edu/~wkahan/ARITH_17U.pdf
是的,在某些情况下,由于应用程序设计错误而遇到下溢,并且正确的操作是修复应用程序.在其他情况下,在逐渐下溢的情况下正常工作的应用程序将失败.
此外,
在许多情况下,缓慢但正确的被认为是比快速但危险的更好的默认值.
由于逐渐下溢是默认设置,因此谷歌会发现人们抱怨并希望将其关闭.如果OTOH突然下溢是默认的,也许你会看到更多的人抱怨神秘的数字问题?数值编程很难实现!
现代hw减少了处理次正规数的惩罚.参见例如http://www.agner.org/optimize/blog/read.php?i=142&v=t