我正在寻找一个公式,该公式可以限定浮点乘法传播的错误。我已经看到了以下内容(但尚未证明(。
如果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(摆动(,这可能是由于次优证明或在极端情况下真正的精度损失。