開平法 (かいへいほう、英 : extraction of square root )とは、正 の数 の平方根 の小数 表示を求めていくアルゴリズム である。開平 や開平算 、開平計算 とも。平方根を求めることを開平する という。開法 の一種。
開平法の原理
与えられた正の数の正の平方根 の小数表示を求めるために、ここではまず漸化式 を立てて、一般的な求値法を求める。そして、求値の明確化のために、開平法と呼ばれる筆算 の原理を導出する。以下は十進法 表示の場合だが、他の位取り記数法 でも同様な計算で求められる。ここで述べるのと基本的には同じ方法で、立方根 を求める開立法 や、もっと一般に n 乗根を求めることも可能である。
問題の定式化
与えられた √ x (x > 0) に対し、10k の位 ak (k ≤ n ) を求める:
x
=
∑
k
≤
n
10
k
a
k
=
10
n
a
n
+
10
n
−
1
a
n
−
1
+
⋯
+
10
2
a
2
+
10
a
1
+
a
0
+
10
−
1
a
−
1
+
10
−
2
a
−
2
+
⋯
{\displaystyle {\begin{aligned}{\sqrt {x}}&=\textstyle \sum \limits _{k\leq n}10^{k}a_{k}\\&=10^{n}a_{n}+10^{n-1}a_{n-1}+\cdots +10^{2}a_{2}+10a_{1}+a_{0}+10^{-1}a_{-1}+10^{-2}a_{-2}+\cdots \end{aligned}}}
x の首位を an とする。つまり、n は √ x < 10k +1 を満たす最小の k とする。また便宜上 ak = 0 (k > n ) とする。
√ x の 10m の位より上(かみ)の位 pm は分かっているとし、10m の位 am を求めるとする。すなわち
p
m
=
∑
k
=
m
+
1
n
10
k
−
m
−
1
a
k
=
10
n
−
m
−
1
a
n
+
10
n
−
m
−
2
a
n
−
1
+
⋯
+
10
a
m
+
2
+
a
m
+
1
{\displaystyle p_{m}=\textstyle \sum \limits _{k=m+1}^{n}10^{k-m-1}a_{k}=10^{n-m-1}a_{n}+10^{n-m-2}a_{n-1}+\cdots +10a_{m+2}+a_{m+1}}
とおく。
正方形ABCD の面積は 10−2m x , 青い正方形の面積は 100pm 2 で、橙色と桃色の部分の面積の和が (20pm + am )am = rm である。pm の値はすでに決まっていて、am をどこまで大きく取れるのかが問題である。
am は 10m +1pm + 10m am ≤ √ x
を満たす最大の am 、すなわち
(20pm + am )am ≤ 10−2m x − 100pm 2 … (1)
を満たす最大の am である。これを見つける。
am の値は 0 から 9 までの 10 通りなので、順に試していけば am は求まる。
m = n のとき、pn = 0 より
an 2 ≤ 10−2n x
m < n のとき、
20pm am ≤ (20pm + am )am ≤ 10−2m x − 100pm 2
pm ≠ 0 より
a
m
≤
10
−
2
m
x
−
100
p
m
2
20
p
m
{\displaystyle a_{m}\leq {\frac {10^{-2m}x-100{p_{m}}^{2}}{20p_{m}}}}
右辺の計算値により、am の値の見当を付けることができる。
これにより am が求まれば、
p m −1 = 10pm + am
の値が分かるから、
(20p m−1 + a m −1 )a m −1 ≤ 10−2(m −1) x − 100p m −12
を満たす最大の a m −1 を見つければよい。
このようにして、帰納 的に ak (k ≤ n ) の値が求まる。
漸化式の簡略化
不等式(1) を簡略化する。「20 」を基数 10 と合わせるため 10 × 2 とする。そのため
qm = 2pm
ym = 10−2m x − 100pm 2
とおくと、不等式(1) は
(10qm + am )am ≤ ym … (1')
である。
qm = 2pm
= 2(10p m +1 + a m +1 )
= 10q m +1 + 2a m +1 … (2)
(1') を満たす最大の am を求めるために、ym の整数部分 zm を、z m +1 から求める。
rm = (10qm + am )am とおくと、
ym = 10−2m x − 100pm 2
= 100{10−2(m +1) x − (10p m +1 + a m +1 )2 }
= 100{10−2(m +1) x − 100p m +12 } − 100(20p m +1 + a m +1 )a m +1
= 100y m +1 − 100r m +1
100y m +1 = 10−2m x − 10000p m +12 の整数部分は、x の 10i の位を xi とすると、100z m +1 + 10x 2m +1 + x 2m に等しい。したがって、
zm = (100z m +1 + 10x 2m +1 + x 2m ) − 100r m +1
= 100(z m +1 − r m +1 ) + 10x 2m +1 + x 2m … (3)
(2), (3) から、(1') を満たす最大の am を求めていく。
筆算による効率化
pm から不等式(1') を満たす最大の am を求めていくには、筆算による帰納的計算が明確である。
am
√ … … x 2m +1 x 2m
z m +1
r m +1 ↓ ↓
qm am z m +1 − r m +1 x 2m +1 x 2m
am (10qm + am )am
q m −1 zm − rm
zm = 100(z m +1 − r m +1 ) + 10x 2m +1 + x 2m から rm = (10qm + am )am を引き、負とならない最大の am を求める。(主算)
次の a m −1 を求めるために、q m −1 = (10qm + am ) + am を求めておく。(副算)
具体的な計算方法
例として、ここでは x = 5630738.132 の正の平方根 √ x の小数表示を求める。初期値は、
x 6 = 5 , x 5 = 6 , x 4 = 3 , x 3 = 0 , x 2 = 7 , x 1 = 3 , x 0 = 8 , x −1 = 1 , x −2 = 3 , x −3 = 2 , xi = 0 (i < −3)
漸化式による求値
まずは a 3 を求める。
z 4 = 0
r 4 = 0
p 3 = 0 より q 3 = 0
z 3 = 100(z 4 − r 4 ) + 10x 7 + x 6 = 100 × (0 − 0) + 5 = 5
r 3 = (10q 3 + a 3 )a 3 = a 3 2
a 3 2 ≤ 5 を満たす最大の a 3 は、a 3 = 2 である。
次に、a 2 を求める。
q 2 = (10q 3 + a 3 ) + a 3 = 2 + 2 = 4
z 2 = 100(z 3 − r 3 ) + 10x 5 + x 4 = 100 × (5 − 4) + 63 = 163
r 2 = (10q 2 + a 2 )a 2 = (40 + a 2 )a 2
(40 + a 2 )a 2 ≤ 163 を満たす最大の a 2 は、a 2 = 3 である。
a 1 を求める。
q 1 = (10q 2 + a 2 ) + a 2 = 43 + 3 = 46
z 1 = 100(z 2 − r 2 ) + 10x 3 + x 2 = 100 × (163 − 129) + 7 = 3407
r 1 = (10q 1 + a 1 )a 1 = (460 + a 1 )a 1
(460 + a 1 )a 1 ≤ 3407 を満たす最大の a 1 は、a 1 = 7 である。
同様の計算を繰り返すと、各項の値は次の表のようになる。
m
10x 2m +1 + x 2m
zm
qm
rm
am
3
05
5
0
4
2
2
63
163
4
4
3
1
07
3407
46
129
7
0
38
13838
474
3269
2
−1
13
435413
4744
9484
9
−2
20
837220
47458
427041
1
−3
00
36263900
474582
474581
7
−4
00
304311100
4745834
284750076
6
−5
00
1956102400
47458352
1898334096
4
︙
︙
︙
︙
︙
︙
am の値から
√ 5630738.132 = 2372.91764…
である。
筆算による求値
am の値は、先述の筆算による方法(開平法)によりさらに簡単に計算できる。
本節は、これまでに登場した漸化式の原理により筆算の手順を説明するが、筆算の手順だけを知りたいのであれば、漸化式による説明の箇所を読み飛ばしても差し支えない
x = 5630738.132 の正の平方根 √ x の小数表示を求める。
まず、x の値を、小数点 から2桁ずつ「ブロック」に分けて書く。
各ブロックは、zm = 100(z m +1 − r m +1 ) + 10x 2m +1 + x 2m の下線部に該当する。
左側に縦2つ等しい値を書き、積が左端のブロック (5) を超えない最大の値 (2) を見つける。ブロック (5) の上に見つけた値 (2) を書く。左の筆算を立て、下に和の計算結果 (4) を書く。ブロック (5) の下に、左の筆算の、和でなく積の計算結果(この場合は和と同じ 4 )を書く。筆算を立て、差の計算結果 (1) をその下に書く。
2
2 √ 5 63 07 38. 13 2
積が5 以下の最大値→2 4 ←左の筆算の積
和→4 1 ←差
z 4 = r 4 = 0 より z 3 = 10x 8 + x 7 = 5 。q 3 = 0 より、(0 + a 3 )a 3 ≤ 5 を満たす最大の a 3 は a 3 = 2 。この時 r 3 = 2 × 2 = 4 。次の計算のために、z 3 − r 3 = 5 − 4 = 1 , q 2 = 2 + 2 = 4 を計算しておく。
差の計算結果 (1) の右隣りに、上のブロック (63) を下ろす。左の筆算の末位に縦2つ等しい値を書き、積が下ろしてできた数 (163) を超えない最大の値 (3) を見つける。ブロック (63) の上に見つけた値 (3) を書く。左の筆算を立て、下に和の計算結果 (46) を書く。下ろしてできた数 (163) の下に、左の筆算の積の計算結果 (129) を書く。筆算を立て、差の計算結果 (34) をその下に書く。
2 3
2 √ 5 63 07 38. 13 2
2 4 ↓ ブロックを下ろす
43 1 63
積が163 以下の最大値→ 3 1 29 ←左の筆算の積
和→46 34 ←差
z 2 = 100(z 3 − r 3 ) + 10x 5 + x 4 = 163 。(40 + a 2 )a 2 ≤ 163 を満たす最大の a 2 は a 2 = 3 。この時 r 2 = 43 × 3 = 129 。次の計算のために、z 2 − r 2 = 163 − 129 = 34 , q 1 = 43 + 3 = 46 を計算しておく。
同様の計算を(m = −5 まで)行うと、次のようになる。
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
これより
√ 5630738.132 = 2372.91764…
である。
検算してみると、
2372.917642 = 5630738.1262231696
2372.917652 = 5630738.1736815225
となり
2372.91764 < √ 5630738.132 < 2372.91765
が確かに成り立つ。
珠算による開平法
珠算による開平法として次の方法がある。
根の定位
根の定位の仕方は次のようになる。
平方が整数のとき:平方の一の位から左へ2桁ずつ区分して、その区分できた回数が、根の桁数となる。
平方が帯小数のとき:平方の一の位から左へ2桁ずつ区分して、その区分できた回数が、根の整数の桁数となる。
平方が小数のとき:平方の 0 を2桁ずつ区分して、その区分できた回数が、根の小数点以下の 0 の桁数となる。
倍根法
例:√ 4225 = 65
平方の一の位から左へ2桁ずつ区分して、根の桁数が2桁であることを調べる。(根の定位による)
最後の区分された数 42 に含まれている平方根 6 を求めて、初根 6 を置き、初根 6 の 2 乗 (62 = 36 ) を 42 から引く。
初根 6 の 2 倍の 12 を、左に置き、その 12 で残りの平方を割って、次根 5 を初根の隣りに置く。
次根 5 の 2 乗 (52 = 25 ) を引く。
平方根は 65 である。
半九九法
例:√ 4225 = 65
平方の一の位から左へ2桁ずつ区分して、根の桁数が2桁であることを調べる。(根の定位による)
最後の区分された数 42 に含まれている平方根 6 を求めて、初根 6 を置き、初根 6 の 2 乗 (62 = 36 ) を 42 から引く。
残りの平方 625 を 2 で割る。(初根の 2 乗を引いたあと、いつも残りの平方を 2 で割る)
2 で割った平方の残りを、初根 6 で割って次根 5 を求める。
次根 5 の半九九 12.5 を引く。
平方根は 65 である。
脚注
関連項目
外部リンク