いろは3025218 views
英語617403 views
高校化学2933198 views
数学講師2913151 views
高校生物553211 views
高校国語790013 views
Computer370048 views
中学理科1633649 views
小学社会311570 views
りんご220229 views
Help
Tools

English

開平法とニュートン法で電卓なしにルート 2 の桁を出す

紙と鉛筆だけで が出せます。方法は 2 つあり、どちらも小学校の割り算より難しくありません。

1 つは平均をとってくり返すやり方。もう 1 つは筆算で 1 桁ずつ確定させるやり方です[1]。

平均をとってくり返す

が より大きいとします。すると は より小さい。

掛けると になる 2 数なので、片方が大きければもう片方は小さくなります。ならば、その平均は真ん中あたり[1]。

この式をくり返し当てるだけ。ヘロンの方法、あるいはバビロニアの方法と呼ばれます[2]。

にニュートン法を当てても、まったく同じ漸化式が出ます[1]。呼び名が違うだけで中身は 1 つ。

canvas: 式は呼び出しにそのまま書いてください。この引数は焼けません -> drawMath(… herStep[herIndex][0] …)

から始めます。。

。。

で まで合います[2]。4 回で小数第 9 位まで届きました。

正しい桁数が倍々に増える

合っている桁数は 、、、 と伸びました。1 回ごとにおよそ 2 倍になります[1]。

の誤差を とすると、次の誤差はおよそ 。誤差の 2 乗で小さくなるので、この伸び方になります。

出発点はどこでもかまいません。 から始めても、 で同じ に着きます[2]。

だいたいの値を 1 つ決める

x と 2/x の平均をとる

桁がそろうまでくり返す

例:ルート 5 を 3 回で出す

から始めます。 なので 。

なので 。 で 。

です。3 回で小数第 7 位まで合いました。

筆算で 1 桁ずつ出す

もう 1 つのやり方が開平法です。割り算の筆算に似た手順で、上の桁から 1 桁ずつ確定させます[1]。

小数点から 2 桁ずつ区切り、区切りごとに 1 桁ずつ出す。使う式は の後半です。

例:ルート 2 の筆算をたどる

1 回目は に対して 。商の 1 桁目が で、余りは です。

2 回目は を下ろして 。直前の商 を 倍して にし、 をみたす最大の を探します。 で 。

3 回目は 。商 を 倍して とし、 から 。 で余り 。

4 回目は 。 から 、。ここまでで が確定します。

ヘロンの方法

1 回ごとに桁数が倍になる。途中の値は近似で、最後まで動く

開平法

1 回に 1 桁ずつ。出した桁は確定していて、あとで変わらない

2 つの使い分け

桁をたくさん欲しいならヘロンの方法が速い。5 回も回せば十数桁に届きます[1]。

上から 2、3 桁でよいなら開平法のほうが確実です。途中で計算を誤っても、確定した桁は残ります。

割り算が面倒なときも開平法が向きます。ヘロンの方法は毎回 の割り算が要るためです。

ヘロンの方法で を求めます。 のとき の値はどれですか。

__RESULT__

です。 なので、1 回で小数第 1 位まで合っています。

よくある誤り

ヘロンの方法で の を にとりちがえる。中身は求めたい数です。
平均をとらずに をそのまま次の値にする。振動して収束しません。
開平法で 2 桁ずつ区切らずに 1 桁ずつ下ろす。区切りは 2 桁です。
直前の商を 2 倍し忘れる。 の部分が要ります。
で を大きくとりすぎる。下ろした数を超えない最大値です。
出発点によって答えが変わると考える。どこから始めても同じ値に近づきます。
1 回だけ計算して答えとする。桁がそろうまでくり返します。

平均をとってくり返すか、1 桁ずつ確定させるか。どちらも掛け算と割り算だけで、 の桁がいくらでも出せます。

参考

Methods of computing square roots - Wikipedia
Heron-Verfahren - Wikipedia
$x$ が $\sqrt{2}$ より大きければ $\frac{2}{x}$ は小さい。ならば平均は真ん中あたり、という発想だけで $x_{n+1} = \frac{1}{2}(x_n + \frac{2}{x_n})$ が出ます。$x_0 = 1$ から 4 回回すと $1.414213562$ まで合い、正しい桁数は $1, 2, 5, 9$ と倍々に伸びる。$y = x^2-2$ にニュートン法を当てても同じ式です。もう 1 つの開平法は、$(20p+d)d$ を使って上の桁から 1 桁ずつ確定させる筆算。出した桁が動かない点が違いになります。