見出し画像

連分数展開(√2)

x = 1+1/(1+x) などをつかって√2の連分数展開の計算をprolog言語でしてみる。

画像1

renbun(N) :-
   renbun_aux(N,0,1),!.
renbun_aux(N,N,_) :- !.
renbun_aux(N,M,X) :-
   X1 is 1+1/(1+X),
   X2 is X1*X1,
   M1 is M+1,
   write(M),write(':'),write(X1),write(','),write(X2),nl,
   renbun_aux(N,M1,X1).

結果:

| ?-renbun(20).
0:1.5,2.25
1:1.4,1.96
2:1.41666666666667,2.00694444444444
3:1.41379310344828,1.99881093935791
4:1.41428571428571,2.00020408163265
5:1.41420118343195,1.99996498722034
6:1.41421568627451,2.00000600730488
7:1.41421319796954,1.99999896931124
8:1.41421362489487,2.00000017683829
9:1.41421355164605,1.99999996965935
10:1.41421356421356,2.00000000520563
11:1.41421356205732,1.99999999910685
12:1.41421356242727,2.00000000015324
13:1.4142135623638,1.99999999997371
14:1.41421356237469,2.00000000000451
15:1.41421356237282,1.99999999999923
16:1.41421356237314,2.00000000000013
17:1.41421356237309,1.99999999999998
18:1.4142135623731,2.0
19:1.41421356237309,2.0
yes
| ?-X is sqrt(2.0).
X = 1.4142135623731
yes

この記事が気に入ったらサポートをしてみませんか?