双精度浮点数double的ULP误差计算结果错误问题求助
ULP误差计算误区解答
对于指数位相同的两个双精度浮点数,ULP误差的计算规则为:两个数的二进制尾数的数值差,尾数最低位每差1对应1 ULP。
你给出的两个double值符号位、指数位完全一致,无需处理指数对齐问题,直接对比尾数即可:
exact尾数末6位:0111110 → 十进制值为62 compt尾数末6位:1000100 → 十进制值为68
二者的尾数差值为68 - 62 = 6,因此ULP误差为6 ULP,和标准答案一致。
你的计数错误的核心原因是混淆了「两个值中间的浮点数个数」和「两个值的步长差」:
你统计的是0111110到1000100之间存在5个独立的double值,这部分统计是对的,但ULP误差计算的是两个值的差对应的最小步长数量,不是中间值的个数。可以用整数类比:整数1和整数3的差值是2(对应2个步长),但二者中间只有1个整数2,你之前的计数逻辑就相当于把步长差等同于中间值数量,所以比正确结果少了1。
内容的提问来源于stack exchange,提问作者Quang Thinh Ha
相关产品推荐
相关产品推荐

