program wortel;
procedure Stern_Brocot(told : integer);
{
Walk through Stern-Brocot tree
until fraction approaches sqrt(2)
}
var
t : integer;
m1,n1,m2,n2 : integer;
begin
{ Initialize tree }
m1 := 0; n1 := 1;
m2 := 1; n2 := 0;
t := 0;
while true do
begin
if (n1+n2)*(n1+n2) < (m1+m2)*(m1+m2)*2 then
{ Tightening }
begin
{ Upper Bound }
m2 := m1+m2;
n2 := n1+n2;
end else begin
{ Lower Bound }
m1 := m1+m2;
n1 := n1+n2;
end;
Writeln(m1,'/',n1,' < 1/sqrt(2) < ',m2,'/',n2);
if t > told then Break;
t := t + 1;
end;
Writeln;
Writeln('iterations = ',t);
Writeln('sqrt(2) = ',sqrt(2));
Writeln(n1,'/',m1,' = ',n1/m1);
Writeln(n2,'/',m2,' = ',n2/m2);
Writeln(n1,'/',m1,' < sqrt(2) < ',n2,'/',m2);
end;
begin
Stern_Brocot(42);
end.
Output:
0/1 < 1/sqrt(2) < 1/1
1/2 < 1/sqrt(2) < 1/1
2/3 < 1/sqrt(2) < 1/1
2/3 < 1/sqrt(2) < 3/4
2/3 < 1/sqrt(2) < 5/7
7/10 < 1/sqrt(2) < 5/7
12/17 < 1/sqrt(2) < 5/7
12/17 < 1/sqrt(2) < 17/24
12/17 < 1/sqrt(2) < 29/41
41/58 < 1/sqrt(2) < 29/41
70/99 < 1/sqrt(2) < 29/41
70/99 < 1/sqrt(2) < 99/140
70/99 < 1/sqrt(2) < 169/239
239/338 < 1/sqrt(2) < 169/239
408/577 < 1/sqrt(2) < 169/239
408/577 < 1/sqrt(2) < 577/816
408/577 < 1/sqrt(2) < 985/1393
1393/1970 < 1/sqrt(2) < 985/1393
2378/3363 < 1/sqrt(2) < 985/1393
2378/3363 < 1/sqrt(2) < 3363/4756
2378/3363 < 1/sqrt(2) < 5741/8119
8119/11482 < 1/sqrt(2) < 5741/8119
13860/19601 < 1/sqrt(2) < 5741/8119
13860/19601 < 1/sqrt(2) < 19601/27720
13860/19601 < 1/sqrt(2) < 33461/47321
47321/66922 < 1/sqrt(2) < 33461/47321
80782/114243 < 1/sqrt(2) < 33461/47321
80782/114243 < 1/sqrt(2) < 114243/161564
80782/114243 < 1/sqrt(2) < 195025/275807
275807/390050 < 1/sqrt(2) < 195025/275807
470832/665857 < 1/sqrt(2) < 195025/275807
470832/665857 < 1/sqrt(2) < 665857/941664
470832/665857 < 1/sqrt(2) < 1136689/1607521
1607521/2273378 < 1/sqrt(2) < 1136689/1607521
2744210/3880899 < 1/sqrt(2) < 1136689/1607521
2744210/3880899 < 1/sqrt(2) < 3880899/5488420
2744210/3880899 < 1/sqrt(2) < 6625109/9369319
9369319/13250218 < 1/sqrt(2) < 6625109/9369319
15994428/22619537 < 1/sqrt(2) < 6625109/9369319
15994428/22619537 < 1/sqrt(2) < 22619537/31988856
15994428/22619537 < 1/sqrt(2) < 38613965/54608393
54608393/77227930 < 1/sqrt(2) < 38613965/54608393
93222358/131836323 < 1/sqrt(2) < 38613965/54608393
93222358/131836323 < 1/sqrt(2) < 131836323/186444716
iterations = 43
sqrt(2) = 1.41421356237310E+0000
131836323/93222358 = 1.41421356237310E+0000
186444716/131836323 = 1.41421356237310E+0000
131836323/93222358 < sqrt(2) < 186444716/131836323