在R中,我有
options(digits=22)
sqrt((1-exp(-20)))/sqrt((1-exp(-19.9)))
> 1.000000000108386855047
sqrt((1-exp(-20))/(1-exp(-19.9)))
> 1.000000000108386633002
我的问题是:我是否可以期望一个版本比另一个版本更精确(也使用其他语言),还是取决于除法和sqrt
的实现?
答案 0 :(得分:1)
这是因为您的第二个表达式是错误的。它应该是
sqrt((1-exp(-10))/(1-exp(-9)))
,您计算了1-a/(1-b)
之类的值的平方根,而不是
(1-a)/(1-b
)。
进行此更改后,两个结果均为1.000039008990497
。
以下是更新的答案:对于小x,计算sqrt(1-x)
有点不准确。为了获得更好的结果,您可以使用泰勒级数sqrt(1-x) ~ 1 - x/2
(或更高的项,取决于x的值)来近似。
> x = exp(-20)
> y = exp(-19.9)
> sqrt((1-x)/(1-y))
[1] 1.0000000001083866
> sqrt(1-x)/sqrt(1-y)
[1] 1.0000000001083869
> (1-x/2)/(1-y/2)
[1] 1.0000000001083866
正确的舍入值为1.0000000001083867
。您会看到泰勒级数值与第一个相同。 IMO的差异很小,通常不值得使用泰勒级数。