浮点数绝对与相对误差公式应用疑问:计算结果为何与书籍不符?
嘿,咱们来一步步拆解你遇到的问题,核心其实是对公式里的符号定义理解偏差了,理清楚就明白啦~
首先,你给出的绝对误差和相对误差公式,是针对规格化浮点数的标准定义,这里的关键是搞清楚每个符号的准确含义:
- $B$:浮点数的基数(你的例子里是十进制,所以$B=10$)
- $e$:规格化浮点数的指数,也就是当数表示为 $d_1.d_2d_3\ldots d_p \times B^e$ 时的指数,其中$d_1 \neq 0$(基数B下的非零有效数字)
- $p$:尾数的总位数(包括小数点前的那一位有效数字)
你的例子重新计算
你拿$x=5/7=0.71428571$截断为5位尾数得到$0.71428 \times 10^0$,但这个是非规格化的表示。转换成规格化十进制浮点数应该是:
$$x=7.1428571 \times 10^{-1}$$
这里:
- 规格化指数$e=-1$
- 尾数长度$p=5$(截断后的尾数是$7.1428$,共5位)
代入截断的绝对误差公式:
$$\Delta \leq B^{e-p+1} = 10^{-1 -5 +1} = 10^{-5}$$
这就和书籍给出的结果完全一致了!
你之前的错误原因
你之前误把$e$当成了非规格化表示的指数(也就是$0.71428 \times 10^0$里的$0$),但公式里的$e$必须是规格化后的指数。这是很多初学者容易踩的坑——不同教材对浮点数表示的符号定义可能略有差异,但一定要让符号的含义和公式匹配。
再验证下实际误差:
$$|x - fl(x)| = |0.71428571 - 0.71428| = 0.00000571$$
这个值确实小于等于$10^{-5}$,完全符合公式给出的上限。
关于相对误差的补充
相对误差公式同样要匹配规格化参数,代入后得到上限是$10{1-5}=10{-4}$,这是最坏情况下的最大值,你的例子里实际相对误差约为$8 \times 10^{-6}$,远小于这个上限是正常的,因为上限是覆盖所有可能情况的极值。
如果你的教材里采用的是非规格化的浮点数表示(比如直接用$0.d_1d_2\ldots d_p \times 10^0$),那公式会简化为$\Delta \leq B{-p}$(截断),也就是$10{-5}$,这也和书里的结果一致——本质还是要确认教材里公式对应的浮点数表示定义,符号对齐了,计算就不会出错。
内容的提问来源于stack exchange,提问作者gbox

