如果您计算1+x
的x
精度低于机器精度,那么答案将1
是x = 0
. 但这意味着相对后向误差是|0 - x| / |x| = 1
,即这种方法不是后向稳定的,并且任何基于标准浮点算术的方法都不可能。
感觉这个发现一定是错误的,因为字面上最简单的操作怎么可能不向后稳定呢?那么上述推理的错误在哪里呢?
如果您计算1+x
的x
精度低于机器精度,那么答案将1
是x = 0
. 但这意味着相对后向误差是|0 - x| / |x| = 1
,即这种方法不是后向稳定的,并且任何基于标准浮点算术的方法都不可能。
感觉这个发现一定是错误的,因为字面上最简单的操作怎么可能不向后稳定呢?那么上述推理的错误在哪里呢?
确实,该函数不允许后向稳定算法。
引起混淆是因为我正在阅读的讲义似乎暗示向后稳定性是每个算法都应该瞄准的目标,但是正如上面的示例清楚地表明存在不存在向后稳定算法的算法。与此同时,我做了更多的阅读,我了解到这不是你应该追求的向后稳定性,而是混合稳定性。根据维基百科:
数值稳定性的通常定义使用了一个更一般的概念,称为混合稳定性,它结合了前向误差和后向误差。
我认为这个结果令人惊讶的另一个原因是,除了我们习惯于像您在回答中所说的那样针对向后稳定的算法这一事实之外。
认为是近似计算的结果,即,我们正在尝试计算和. 有了这个微不足道的变化,计算现在是向后稳定的:任何小的绝对扰动相当于一个小的相对扰动,给出一个小的相对后向误差。
所以我认为第二个原因不向后稳定令人惊讶的是,这令人惊讶。它的后向稳定性取决于您如何定义问题的一些相当小的细节。特别是,在一个真正的数值程序中,是否先验可能不是很明显要么是思考程序行为的正确方法。不同的人最终可能会对程序行为进行不同的建模。