開平法
開平法(かいへいほう, extraction of square root)とは、正の数の平方根の小数表示を求めていくアルゴリズムである。開平とも。平方根を求めることを開平するという。開法の一種。
目次 |
数式による開平法 [編集]
開平法は筆算を用いる方法が効率的でよく使われるが、ここでは原理も含めて数式による求値法を説明する。以下は十進法表記の場合だが、他の位取り記数法でも同様な計算で求められる。ここで述べるのと基本的には同じ方法で、立方根を求める開立法や、もっと一般に n 乗根を求めることも可能である。
- 単に筆算による手順を知りたいだけの場合は、筆算による開平法の計算例を参照するだけでよい。
帰納的方法 [編集]
x > 0 に対し、√x が次のように表されているとする。
ここで、各 ak は 0 から 9 までの整数とする。
n は十分大きな整数で構わないが、k ≥ n で ak = 0 が続くだけで意味がないので、n は an ≠ 0 すなわち 102n ≤ x を満たす最大の整数とする。
ある整数 m があって、ak (k > m) の値、すなわち
は分かっているとする。
am の満たすべき条件は、
- 10m+1pm + 10mam ≤ √x < 10m+1pm + 10m(am + 1)
すなわち
- (20pm + am)am ≤ 10−2mx − 100pm2 < {20pm + (am + 1)}(am + 1)
である。これを満たす am を見つける。
- この段階では、am の値を地道に探す必要があるが、am は 0 から 9 までの整数のいずれかなので、多くても 10 通りの値を考えればよい。
- m = n のとき、pn = 0 より
- an2 ≤ 10−2nx
- m < n のとき、
- 20pmam ≤ (20pm + am)am ≤ 10−2mx − 100pm2 < {20pm + (am + 1)}(am + 1)
- pm ≠ 0 より
- 右辺の計算値により、am のおよその値の見当を付けることができる。
これにより am が求まれば、次は、
- pm−1 = 10pm + am
の値が分かるので、
- (20pm−1 + am−1)am−1 ≤ 10−2(m−1)x − 100pm−12
を満たす最大の am−1 を見つければよい。
このようにして、帰納的に ak (k ≤ n) の値が求まる。
計算の簡略化 [編集]
計算の簡略化のために、
- qm = 2pm
- ym = 10−2mx − 100pm2
- rm = (10qm + am)am
とおき、漸化式を立てて求めていくことを考える。
- qm = 10qm+1 + 2am+1
- ym = 10−2mx − 100pm2 = 100{10−2(m+1)x − pm2}
- = 100{10−2(m+1)x − (10pm+1 + am+1)2}
- = 100{10−2(m+1)x − 100pm+12 − (20pm+1 + am+1)am+1}
- = 100(ym+1 − rm+1)
am, rm を求めたいが、am の満たすべき条件は
- (10qm + am)am ≤ ym < {10qm + (am + 1)}(am + 1)
である。
- 左辺は rm に等しいが、am, rm を探しにくくなるので、この不等式では rm に置き換えない。
この不等式の左辺は整数なので、条件としては ym の小数部分は無視してよい。
ym の整数部分を zm とすると、zm は 100(ym+1 − rm+1) の整数部分に等しい。
と表されているとすると、100ym+1 = 10−2mx − 10000pm+12 の整数部分は 100zm+1 + 10x2m+1 + x2m である。したがって
- zm = (100zm+1 + 10x2m+1 + x2m) − 100rm+1
- = 100(zm+1 − rm+1) + 10x2m+1 + x2m
が成り立つ。
am を求めるには、ym を zm に代えた不等式
- (10qm + am)am ≤ zm < {10qm + (am + 1)}(am + 1)
で考えればよい。これから
- rm = (10qm + am)am
が求まる。
計算例 [編集]
計算例として x = 5630738.132 の平方根を求める。ここで使う式は


- qm = 10qm+1 + 2am+1
- zm = 100(zm+1 − rm+1) + 10x2m+1 + x2m
- (10qm + am)am ≤ zm < {10qm + (am + 1)}(am + 1)
- rm = (10qm + am)am
初期値として、
- x6 = 5, x5 = 6, x4 = 3, x3 = 0, x2 = 7, x1 = 3, x0 = 8, x−1 = 1, x−2 = 3, x−3 = 2, これら以外の xj の値は全て 0
- 106 ≤ x < 108 より、an ≠ 0 を満たす最大の n は n = 3
- k > 3 のとき ak = 0
- q3 = 0
- y4 = 0 より z4 = 0
の各位 ak (k ≤ 3) を求めていく。
初期値より、q3 = 0, z3 = 10x7 + x6 = 5
- a32 ≤ z3 < (a3 + 1)2
を満たす a3 を探すと、a3 = 2 が見つかる。
- r3 = (10q3 + a3)a3 = 4
- q2 = 2a3 = 4
- z2 = 100(z3 − r3) + 10x5 + x4 = 163
- (10q2 + a2)a2 ≤ z2 < {10q2 + (a2 + 1)}(a2 + 1)
を満たす a2 を探すと、a2 = 3 が見つかる。
- r2 = (10q2 + a2)a2 = 129
- q1 = 10q2 + 2a2 = 46
- z1 = 100(z2 − r2) + 10x3 + x2 = 3407
- (10q1 + a1)a1 ≤ z1 < {10q1 + (a1 + 1)}(a1 + 1)
を満たす a1 を探すと、a1 = 7 が見つかる。
同様の計算を繰り返すと、各項の値は次の表のようになる。
| m | qm | zm | am | rm |
|---|---|---|---|---|
| 3 | 0 | 5 | 2 | 4 |
| 2 | 4 | 163 | 3 | 129 |
| 1 | 46 | 3407 | 7 | 3269 |
| 0 | 474 | 13838 | 2 | 9484 |
| −1 | 4744 | 427041 | 9 | 435413 |
| −2 | 47458 | 474581 | 1 | 837220 |
| −3 | 474582 | 33220789 | 7 | 36263900 |
| −4 | 4745834 | 284750076 | 6 | 304311100 |
| −5 | 47458352 | 1898334096 | 4 | 1956102400 |
| ︙ | ︙ | ︙ | ︙ | ︙ |
am の列から
- √5630738.132 = 2372.91764…
である。
筆算による開平法 [編集]
開平法は、筆算を用いるとさらに簡単に計算できる。
筆算を用いた略記 [編集]
rm と qm−1 の式を比べると、式の形が似ていることが分かる。
- rm = (10qm + am)am
- qm−1 = 10qm + 2am = (10qm + am) + am
rm と qm−1 は 10qm + am と am のそれぞれかけ算と足し算である。
例えば、q−1 = 4744, a−1 = 9 ならば、
| 47449 | 47449 | |
| × 9 | + 9 | |
| r−1 = 427041 | q−2 = 47458 |
と計算できる。
この2つの筆算を1つにまとめて
| 47449 | |
| 9 | |
| r−1 = 427041 q−2 = 47458 |
と書き、r−1 の値は、z−2 の計算に用いるので他の所へ書く。
さらに、qm−1 は qm を左に1桁ずらして 2am を加えた値である。
例えば q3 = 0, a3 = 2, a2 = 3, a1 = 7, a0 = 2 ならば、
| 2 | ||
| 2 | ←a3 を縦に2つ並べる | |
| 43 | ||
| 3 | ←a2 を右端に縦に2つ並べる | |
| 467 | ||
| 7 | ←a1 を右端に縦に2つ並べる | |
| 4742 | ||
| 2 | ←a0 を右端に縦に2つ並べる | |
| 4744 |
このように、am を縦2つに並べ足し算を行う作業を一連の筆算として繰り返すことで、記述を簡略化できる。
計算例 [編集]
- 本節では、先述の漸化式を踏まえて筆算による開平法の説明をするが、筆算の手順を知るだけであれば漸化式による説明を飛ばしても差し支えなく、これまでの節を読む必要もない。
計算例として x = 5630738.132 の平方根を求める。
まず、x の値を書き、小数点から2桁ずつに区切る。
| √5 63 07 38. 13 2 |
分けて得られた2桁(1桁)の数をブロックと呼ぶことにする。
- これは、漸化式
- zm = 100(zm+1 − rm+1) + 10x2m+1 + x2m
- の最後の2項を末位に付加しやすくするために分けている。
2乗しても(左端のブロックの)5 を超えない最大の整数を探すと 2 であるので、他の所に 2 を縦に2つ並べて書く。それらを足し算の筆算として計算し、その下に計算結果の 4 を書く。この筆算を、足し算ではなくかけ算とした場合の計算結果(この場合は足し算と同じ 4)を 5 の下に書く。引き算の筆算を行い、計算結果の 1 をその下に書く。
| 2 | 2 | |
| √5 63 07 38. 13 2 | 2←かけ算が5以下の最大整数 | |
| 4←右の筆算のかけ算の計算結果 | 4←足し算の計算結果 | |
| 1←引き算の計算結果 |
- z3 = 5 で、それを基に a3 = 2 を探した。それから r3 = 4 を計算し、左側の筆算に書き、引き算を行った。さらに q2 = 4 を計算し、右側の筆算に記述した。
次のブロックを下ろし、右の筆算の右端の縦2つに等しい数を書くとき、かけ算が 163 を超えない最大の数を探すと 3 である。63 のブロックの上に 3 と書き、右の筆算に 3 を縦に2つ並べる。さらに、右の筆算のかけ算と足し算の結果を、左右の筆算に書き加え、左の筆算では引き算を行う。
| 2 3 | 2 | |
| √5 63 07 38. 13 2 | 2 | |
| 4 ↓ 次のブロックを下ろす | 43 | |
| 1 63 | 3←かけ算が163以下の最大整数 | |
| 1 29←右の筆算のかけ算の計算結果 | 46←足し算の計算結果 | |
| 34←引き算の計算結果 |
- z2 = 163 で、それを基に a2 = 3 を探した。それから r2 = 129 を計算し、左側の筆算に書き、引き算を行った。さらに q1 = 46 を計算し、右側の筆算に記述した。
同様の計算を繰り返すと、
| 2 3 7 2. 9 1 7 6 4 | 2 | |
| √5 63 07 38. 13 20 00 00 00 | 2 | |
| 4 | 43 | |
| 1 63 | 3 | |
| 1 29 | 467 | |
| 34 07 | 7 | |
| 32 69 | 4742 | |
| 1 38 38 | 2 | |
| 94 84 | 47449 | |
| 43 54 13 | 9 | |
| 42 70 41 | 474581 | |
| 83 72 20 | 1 | |
| 47 45 81 | 4745827 | |
| 36 26 39 00 | 7 | |
| 33 22 07 89 | 47458346 | |
| 3 04 31 11 00 | 6 | |
| 2 84 75 00 76 | 474583524 | |
| 19 56 10 24 00 | 4 | |
| 18 98 33 40 96 | 474583528 | |
| 57 76 83 04 |
のようになる。
- 計算結果の小数点の位置は x の小数点の位置と揃える
- 下ろすブロックが無くなった場合は 00 を下ろす
以上により
- √5630738.132 = 2372.91764…
である。
これが正しいことを検証してみると、
- 2372.917642 = 5630738.1262231696
- 2372.917652 = 5630738.1736815225
となり
- 2372.91764 < √5630738.132 < 2372.91765
が確かに成り立つ。
珠算による開平法 [編集]
珠算による開平法として次の方法がある。
- 倍根法
- 半九九法
根の定位 [編集]
根の定位の仕方は次のようになる。
- 平方が整数のとき:平方の1の位から左へ2桁ずつ区分して、その区分できた回数が、根の桁数となる。
- 平方が帯小数のとき:平方の1の位から左へ2桁ずつ区分して、その区分できた回数が、根の整数の桁数となる。
- 平方が小数のとき:平方の小数点以下の0を2桁ずつ区分して、その区分できた回数が、根の小数点以下の0の桁数となる。
倍根法 [編集]
例: √4225 = 65
半九九法 [編集]
例: √4225 = 65






