提问人:john 提问时间:8/6/2019 最后编辑:john 更新时间:9/23/2019 访问量:723
浮点乘法上的误差边界
Error bound on floating point multiplication
问:
我正在寻找一个公式来限制浮点乘法传播的误差。我已经看到了以下陈述(但未得到证实)。
如果是 with bound ulps 的浮点近似值,并且同样是 with bound ulps 的浮点近似值,并且是浮点精度,则正确舍入积上的 bound 为 ulps。xa
x
ux
ya
y
uy
p
xa*ya
ux + uy + ux*uy/(2^p) + 0.5
我已经看到以下更简单的结果证明。如果近似于与有结合的 ulps,则正确圆角积上的结合是 ulps。ya
y
uy
x*ya
uy + 0.5
所以我想我正在寻找第一个结果的证明,或者至少是确认它是正确的。
TIA系列
编辑
在采纳了马克·迪金森(Mark Dickinson)在下面的评论中所说的话,并重新阅读了弗洛里安·洛伊奇(Florian Loitsch)的论文(来自上面的第二个公式),很明显,这个问题中的ulp是相对于潜在的非规范化结果而言的。例如,使用 Mark 给出的示例,并通过非 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|≤用户体验 ·ULP(xa)
- |ya − y|≤ uy ·ULP(亚)
则四舍五入到最接近的乘积的误差以 [(2 + 21−p)(UX + UY) + 1/2] ·ulp() 中。xa*ya
这通常比您给出的边界大,大约有 2 个因子。但是,您给出的绑定的有效性需要确认。一般来说,找到严格的误差范围是很困难的,因为当 ulp 在 2 的幂下变化 2 倍时,很容易丢失因子 2(摆动),这可能是由于次优证明或极端情况下的准确性实际损失。
评论
x = 0.75
y = 1.25
uy = 10
ya = 1.25 - 10 * 2**-52
x * ya
x * y
ya
x*ya
15 * ulp(x*ya)
x*ya
x*y
x*y