众所周知,机器 epsilon限制了归一化浮点数范围内的相对舍入误差。但是很容易检查这对于非规范化 数字是否不正确。
我的问题是什么时候应该考虑到这种微妙之处,这个问题会导致什么样的问题?有参考吗?
众所周知,机器 epsilon限制了归一化浮点数范围内的相对舍入误差。但是很容易检查这对于非规范化 数字是否不正确。
我的问题是什么时候应该考虑到这种微妙之处,这个问题会导致什么样的问题?有参考吗?
回到 Intel 387 数学协处理器时代,我不得不为浮点异常维护一个中断处理程序。除此之外,我同意几乎每个人都会忽略非正规(或有时称为次正规),这部分是因为IEEE 754 标准默认处理“逐渐下溢”隐藏了它们(可能很少见)的发生(更好,至少,比溢出异常)。
Denormals 是由于指数下溢而失去显着性的边缘情况。作为数值方法中的理论处理问题,它最有可能由减法抵消产生。但是我们经常会进行减法消除(无论是良性还是有害),而不会产生异常。
一些研究已经完成了由非正规运算导致的性能下降,例如 Dooley 和 Kale (2013),量化次正规浮点值引起的干扰,以及由同一作者和其他合著者,在存在的性能下降次正规浮点值。
这是2012 年的一篇博客文章,该文章链接回一个高度评价的 StackOverflow 线程,该线程讨论了非规范化浮点数对性能的影响。
量化对数值精度的影响往往是特定于应用程序的,并且在许多情况下,与多重或任意精度算术进行比较可能是获得明确测量的唯一方法。
关于为什么非规范化在典型的科学计算中无关紧要,值得讨论一下。通常,我们会得到一些输入并想计算一个函数. 由于数值错误,我们改为计算. 通常需要两种精度:
非正规打破相对,但通常不打破绝对。然而,在大多数情况下,绝对准确度就足够了,建立相对准确度的唯一原因是它不需要了解(这有助于代码和分析模块化)。由于非规范化干扰绝对精度通常仅适用于比我们需要的要小得多,一切都很好。
这并不总是正确的:典型的例子是对一个向量进行归一化,其中输出必须具有机器精度的单位长度。这里确实需要相对精度,因为幅度将被放大到可检测的水平。在这种情况下,非正规应该被视为等同于零。
我已经做了 15 年的数值方法,并且不得不阅读非规范化实际上是什么。鉴于我与其他也在使用数值方法的人进行了很多交谈,并且从未听过任何人谈论它,因此可以肯定地假设每个人都忽略了这种奇怪现象——非正规在日常数值中没有任何作用。