Math 理解灾难性相消中的ULP

Math 理解灾难性相消中的ULP,math,floating-point,ieee-754,Math,Floating Point,Ieee 754,我正在阅读,不理解以下陈述: 当操作数出现舍入错误时,会发生灾难性的取消。例如,在二次公式中,会出现表达式b2-4ac。数量b2和4ac会出现舍入误差,因为它们是浮点乘法的结果。假设它们四舍五入到最接近的浮点数,因此精确到.5 ulp以内。当它们相减时,相消会导致许多精确数字消失,留下的主要是被舍入误差污染的数字。因此,这种差异可能会产生许多ULP的错误。例如,考虑B=3.34,A=1.22,C=2.28。b2-4ac的准确值为.0292。但是b2轮到11.2,4ac轮到11.1,因此最终的答案

我正在阅读,不理解以下陈述:

当操作数出现舍入错误时,会发生灾难性的取消。例如,在二次公式中,会出现表达式b2-4ac。数量b2和4ac会出现舍入误差,因为它们是浮点乘法的结果。假设它们四舍五入到最接近的浮点数,因此精确到.5 ulp以内。当它们相减时,相消会导致许多精确数字消失,留下的主要是被舍入误差污染的数字。因此,这种差异可能会产生许多ULP的错误。例如,考虑B=3.34,A=1.22,C=2.28。b2-4ac的准确值为.0292。但是b2轮到11.2,4ac轮到11.1,因此最终的答案是.1,这是70 ulps的错误,尽管11.2-11.1正好等于.1。减法没有引入任何错误,而是暴露了前面乘法中引入的错误

据我所知,ULP是最后一位的单位,因此如果我以11.2取整11.1556,则最后一位的最大单位数为0.5,即最大误差为0.05


但是为什么如果我得到11.2-11.1=0.1,这是一个70 ulps的错误??如果将错误
0.1-0.0292=0.0708
与精确结果的ulp(
0.0001
)关联,我会认为最后一个值是0.7 ulps的错误,错误甚至是
708 ulps
。原始版本在此处包含一个打字错误(参见中)