平方根の計算アルゴリズム

今日聞いた、平方根を計算アルゴリズム
日本では教えているんじゃないの?と言われたけど、知らなかった!
そしてググっても見当たらないのでメモ。

以下、例として \sqrt{5} を求める。

(25, 5) というペアからスタートする *1\sqrt{n} なら (5n, 5) という形。

(左の数) >= (右の数) のときは、(左の数) - (右の数) を新しい左の数、(右の数) + 10 を新しい右の数とする。
25 - 5 = 20、5 + 10 = 15 なので、ここでは (20, 15) となる。この操作を A と名付けよう。

このペアも (左の数) >= (右の数) なので、再び操作 A を適用する。20 - 15 = 5、15 + 10 = 25 なので、新しいペアは (5, 25)

(左の数) < (右の数) のときは、(左の数) * 100 を新しい左の数、(右の数) は一の位と十の位の間に 0 を入れる。
5 * 100 = 500、25 → 205 なので、ここでは (500, 205) となる。この操作を B と名付けよう。

これらを好きなだけ繰り返す。

(25, 5) →A (20, 15) →A (5, 25) →B (500, 205)

→A (295, 215) →A (80, 225) →B (8000, 2205)

→A (5795, 2215) →A (3580, 2225) →A (1355, 2235) →B (135500, 22305)

→A ...

さて、操作 B の間にある A の数を数えてみよう。

2 2 3 ...

となっている。さらに調べていくと、

2 2 3 6 0 6 7 9 ...

となるはずだ。2.2360679...

これは \sqrt{5} ...!

教えてくれた方の話によると、近似ではなく、延々求めていくと延々近くなるそうです。

開平法ぐらいしか知らないのですが、習ったことがある!という方が居たら教えて下さい :-)

*1:本当は縦書きのほうが分かりやすい