为了避免灾难性的取消,我需要重写以下公式。
作为变小,方法,所以你会得到这将导致灾难性的取消。我尝试用几种不同的方式自己重写公式,但我还没有设法避免灾难性的取消。
目标是近似:
import numpy as np
tn = 0.5
for i in range(1,100):
tn1 = np.sqrt(0.5*(1-np.sqrt(1-tn**2)))
print(i, 6*2**i*tn1)
tn = tn1
输出
1 3.1058285412302498
2 3.132628613281237
3 3.139350203046872
4 3.14103195089053
5 3.1414524722853443
6 3.141557607911622
7 3.141583892148936
8 3.1415904632367617
9 3.1415921060430483
10 3.1415925165881546
11 3.1415926186407894
12 3.1415926453212157
13 3.1415926453212157
14 3.1415926453212157
15 3.1415926453212157
16 3.141593669849427
17 3.1415923038117377
18 3.1416086962248038
19 3.1415868396550413
20 3.1416742650217575
21 3.1416742650217575
22 3.1430727401700396
23 3.1598061649411346
24 3.181980515339464
25 3.3541019662496847
26 4.242640687119286
27 6.0
28 0.0
29 0.0
30 0.0
31 0.0
32 0.0
我应该如何重写公式以避免灾难性取消?