首页 > 解决方案 > 重写表达式以减轻数值抵消

问题描述

我最近回答了这个问题,其中要求 OP 找到一种更好的方法来评估以下表达式

                                      在此处输入图像描述

表达式的x → 0的限制是 1/6,并且从n = 12 开始存在舍入误差,当n = 13时变得更加显着。

我挠了挠头,但无法找到更好的方法来评估先前的表达式。使用二项式近似值1 太好了,因为它对x的每个值都给出了 1/6 !!!任何人?


1: (9+ x )^0.5-3= 3*(1+ x /9)^0.5-3 ≈ 3*(1+ x /18)-3 = 3+ x /6-3 → ​​(9+ x )^0.5-3/ x ≈ 1/6

标签: floating-point

解决方案


商的分子和分母乘以sqrt(9+x)+3并化简。然后你的功能变成

f(x) = 1/(sqrt(9+x)+3)

它不会受到取消的影响,并且对小 x 给出了 1/6 的限制。

虽然这种变换是精确的,但如果您使用泰勒展开的下一个阶数,您可以获得稍微简单但有限的近似值

f(x) ~ 1/6 - 1/216 *x

x=1e-4 的相对误差为 0.1543203441e-10。


推荐阅读