【发布时间】:2017-10-11 22:04:34
【问题描述】:
对于像 f(x) = sqrt(1+x) - sqrt(1-x) 这样的函数,我们会在 x 值的某个范围内得到不需要的结果。但是,我们可以分段重写方程,在某些情况下使用原始方程,在其他情况下使用新方程。
如何确定 x 值的范围并为此类问题找到替代表达式? (通过在线研究,我发现您不希望函数本质上“取消”某些值,但这就是我们正在寻找的全部吗?例如,在 f(x) = e^x - 1 中,我们是总是四处寻找 f(x) = 0?)
【问题讨论】:
-
这个问题写的太宽泛了。你能说得更具体点吗?
-
您能否提供一个 x 的值范围,其中 f(x) = sqrt(1+x) - sqrt(1-x) 在使用浮点算术进行评估时给出的结果很差?为这些 x 值提供 f(x) 的替代表达式,以便不会发生“取消错误”。
-
@Brainpower2049:小
x有问题。例如,f(1e-16)给出1.1102230246251565e-16,而f(1e-17)给出0.0。在数学上但在数值上不等价的表达式是2*x / (sqrt(1+x) + sqrt(1-x))。这在整个域[-1.0, 1.0]上给出了很好的数值结果。 -
请注意,在双精度中,1.0+1e-17 == 1.0 -1e-17 == 1.0
-
1+x或1-x将下降到1为x由于有限的数字表示低于某个值,破坏你的微积分。知道x有问题的范围,我会选择泰勒级数。在你的情况下,x=0就像 this question。请注意,当成员对结果没有影响时,您会停止添加成员,即没有达到更高的精度。
标签: math floating-point computer-science precision