浮点乘法的误差限制



我正在寻找一个公式,该公式可以限定浮点乘法传播的错误。我已经看到了以下内容(但尚未证明(。

如果xa是具有束缚ux ulps 的x浮点近似值,并且类似地ya是具有绑定uy ulps 的y的浮点近似值,并且p是浮点精度,则正确舍入的乘积xa*ya上的边界为 ux + uy + ux*uy/(2^p) + 0.5 ulps。

我已经看到以下更简单的结果被证明。如果ya是具有绑定uy ulps 的y的近似值,则正确舍入的乘积x*ya上的边界为 uy + 0.5 ulps。

所以我想我正在寻找第一个结果的证明,或者至少确认它是正确的。

蒂亚

编辑

在接受了Mark Dickinson在下面的评论中所说的话,并重读了Florian Loitsch的论文(上面的第二个公式来自哪里(,很明显,这个问题中的ulps是相对于潜在的非规范化结果而言的。例如,使用马克给出的示例并通过非IEEE方法计算乘以尾数并删除较低的53位(但必要时四舍五入(的乘积,我们得到

 x   = 0x1.8000000000000p-1
 y   = 0x1.4000000000000p+0
ya   = 0x1.3fffffffffff6p+0
x*y  = 0x0.f000000000000p+0 (denormalised)
x*ya - 0x0.ffffffffffff8p+8 (denormalised)

这是 8 ulp 的误差,并且在第二个公式的范围内。

如果你假设 ulps 是相对于近似值的(我相信另一种情况更困难,而且用处不大(,GNU MPFR 的 doc/algorithms.tex 文档有以下结果的证明,这里重写以遵循您的符号并简化为唯一的精度 p。

如果你有

  • |xa − x| ≤ ux · ulp(xa(
  • |ya− y| ≤ uy · ulp(ya(

则舍入到最接近的乘积的误差以 [(2 + 2 1−p((UX + uy( + 1/2] ·ulp( xa*ya ( 为界。

这通常比您给出的界限大,大约是 2 倍。但是,您需要确认您提供的绑定的有效性。一般来说,找到严格的误差边界是很困难的,因为当ulp在2的幂下变化一个因子2时,很容易失去因子2(摆动(,这可能是由于次优证明或在极端情况下真正的精度损失。

相关内容

  • 没有找到相关文章

最新更新