向下与向上舍入浮点运算误差:RD(f)与RU(f)差值的界求解
浮点舍入差值的界分析
先直接给结论:|RD(f)-RU(f)|的界是小于2E,而不是E。下面用推导逻辑和具体例子来把这个问题讲透:
数学推导验证
我们可以用三角不等式来拆解两个舍入值的差值:
|RD(f) - RU(f)| = |(RD(f) - f) + (f - RU(f))|
根据三角不等式的基本性质,这个差值必然小于等于两个分项绝对值的和:
|RD(f) - f| + |f - RU(f)|
题目里已经给出|RD(f)-f|<E,|RU(f)-f|<E,而|f-RU(f)|和|RU(f)-f|是完全相等的,代入后就能得到:
|RD(f)-f| + |f-RU(f)| < E + E = 2E
用p=4的十进制浮点系统举例
拿题目补充的精度p=4的十进制浮点系统来举个实际例子:
假设真实值f=1.2345,在这个浮点系统里:
- 向下舍入的
RD(f)=1.234,此时|RD(f)-f|=0.0005 - 向上舍入的
RU(f)=1.235,此时|RU(f)-f|=0.0005
这时候两个舍入值的差值|RD(f)-RU(f)|=0.001,正好是2*0.0005=2E(这里E=0.0005)。就算换一个真实值,比如f=1.23456,RD(f)=1.234,RU(f)=1.235,差值还是0.001;如果我们取E=0.0006,那么|RD(f)-f|=0.00056<E,|RU(f)-f|=0.00044<E,差值0.001也依然小于2*0.0006=0.0012,完全符合小于2E的结论。
从这个极端例子能看出来,差值的上限会无限接近2E,所以界不可能是E,必须是2E。
内容的提问来源于stack exchange,提问作者Konstantin Isupov
相关产品推荐
相关产品推荐

