什么时候非正规实际上有用?

6 floating-point ieee-754

每当我搜索"非正规数"或"非正规数"这个术语时,我只会找到如何检测它们并将它们舍入为零的方法.显然,没有人真正喜欢它们,因为与它们打交道会导致性能下降.

然而,它们在各地实施.为什么?如果它是精确的,我会说你需要一个更大的浮动,或者改变你的操作顺序,这样你就可以避免非常小的中间值.我发现很难相信这一点额外的精度真的值得宝贵的时钟周期.

有没有什么好的理由让人们仍然使用非正规数?如果没有明显的理由有非正规数字,为什么要实现它们呢?只是符合IEEE754标准吗?)

jan*_*neb 6

简而言之,因为逐渐下溢保留了一些有用的数学恒等式(例如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

  • @Tinctorius:对于那些实际上并不知道自己在做什么的人来说,"代码嗅觉"是一个过于粗略的指导原则(或者不会因为仔细阅读有关来源而烦恼).精确的FP比较(特别是零)在许多情况下都是合适和正确的; 并且完全被了解浮点数的人使用. (2认同)