Wolfram mathematica Mathematica:“;15位Sqrt[x]产生42+;x的百万位数;

Wolfram mathematica Mathematica:“;15位Sqrt[x]产生42+;x的百万位数;,wolfram-mathematica,precision,Wolfram Mathematica,Precision,我在Mathematica中这样做是为了计算Sqrt[5]: a[0] = 2 a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] a[25]与Sqrt[5]的距离有多近 N[Sqrt[5]-a[25]] // FortranForm 4.440892098500626e-16 [25]^2到5的距离有多近 N[a[25]^2-5] // FortranForm 8.305767102358763e-42074769 我觉得这很奇怪。我

我在Mathematica中这样做是为了计算Sqrt[5]:

a[0] = 2 
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] 
a[25]与Sqrt[5]的距离有多近

N[Sqrt[5]-a[25]] // FortranForm 
4.440892098500626e-16 
[25]^2到5的距离有多近

N[a[25]^2-5] // FortranForm 
8.305767102358763e-42074769 
我觉得这很奇怪。我的估计:如果x在Sqrt[5]的10^-n范围内, 那么x^2在5的10^(-2*n)范围内,给定或获取。不事实上:

a[25]^2 = (Sqrt[5]-4.440892098500626e-16)^2 ~ 5 - 2*5*4.440892098500626e-16 
(扩展(a-b)^2),因此精度应仅为14位左右 (一般为n位)

当然,牛顿的方法在25分钟内只能产生15个精确数字 迭代似乎也很奇怪

在上面的计算中,我是否过早地失去了精度?请注意:

N[Log[Sqrt[5]-a[25]]] // FortranForm 
-35.35050620855721 
同意上述15位精度,即使我不同意
取日志(因此它应该是准确的)

问题在于Mma如何计算您的序列

a[n]是有理数。让我们以对数比例查看分子的数量级:

a[0] = 2 
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] 
ListPlot@Table[Log[10, Log[10, Numerator[ a[i]]]], {i, 1, 25}]

所以,你们的分子是以双指数的形式增加的

在[25]之前,10^-16精度已经达到:

For[i = 1, i < 5, i++,
 Print["dif[", i, "]= ", N[a[i] - Sqrt[5], 16]]
 ]

dif[1]= 0.01393202250021030

dif[2]= 0.00004313361132141470

dif[3]= 4.160143063513508*10^-10

dif[4]= 3.869915959583412*10^-20  
对于[i=1,i<5,i++,
打印[“dif[”,i,“]=”,N[a[i]-Sqrt[5],16]]
]
dif[1]=0.0139320250021030
dif[2]=0.000043133161132141470
dif[3]=4.160143063513508*10^-10
dif[4]=3.869915959583412*10^-20

之后,您就开始控制除法的精度,因为[5]的分子已经有20位了

您是否看到我对“N[a[25]^2-5]”的计算有问题。我猜这是准确的,因为结果是合理的,直到我做N[]?@barry你的计算很好。但是增加分子和分母会使N[]走入歧途。您在[4]处已经有了20个正确的数字!