给出了gn-as的递推关系
g0=c其中是连续双精度。
gn=f(gn-1),其中f是线性函数
然后找出另一个递归的值
hn=gn/exp(n)
约束条件:1<=n<=10^9
在数学上,g(n)的值可以在对数(n)时间内计算出来,然后h(n)可以很容易地计算出来,但问题是doubles数据类型溢出。所以上面的策略只适用于n在1000左右,而不适用于更大的n。注意h(n)的值可以在双倍的范围内
实际的问题是我们试图从g(n)中计算h(n)。我的问题是,有没有什么好的方法可以直接计算h(n)而不溢出双倍。

最佳答案

G0=c
G1=ac+b
G2=a²c+ab+b
G3=a³c+a²b+ab+b
...
Gn=a^nc+b(a^n-1)/(a-1)

那么
Hn = (a/e)^nc+b((a/e)^n-1/e^n)/(a-1) ~ (a/e)^n (c + b/(a-1))

关于algorithm - 第n个项的有效近似而不会丢失精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32413789/

10-11 18:03