平方根の計算アルゴリズム
今日聞いた、平方根を計算アルゴリズム。
日本では教えているんじゃないの?と言われたけど、知らなかった!
そしてググっても見当たらないのでメモ。
以下、例として を求める。
(25, 5) というペアからスタートする *1。 なら (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...
これは ...!
教えてくれた方の話によると、近似ではなく、延々求めていくと延々近くなるそうです。
開平法ぐらいしか知らないのですが、習ったことがある!という方が居たら教えて下さい :-)
*1:本当は縦書きのほうが分かりやすい