開平法

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:出典の明記 開平法(かいへいほう、テンプレート:Lang-en-short)とは、平方根小数表示を求めていくアルゴリズムである。開平開平算開平計算とも。平方根を求めることを開平するという。開法の一種。

開平法の原理

与えられた正の数の正の平方根の小数表示を求めるために、ここではまず漸化式を立てて、一般的な求値法を求める。そして、求値の明確化のために、開平法と呼ばれる筆算の原理を導出する。以下は十進法表示の場合だが、他の位取り記数法でも同様な計算で求められる。ここで述べるのと基本的には同じ方法で、立方根を求める開立法や、もっと一般に テンプレート:Mvar 乗根を求めることも可能である。 テンプレート:For2

問題の定式化

与えられた テンプレート:Math に対し、テンプレート:Math の位 テンプレート:Math を求める:

x=kn10kak=10nan+10n1an1++102a2+10a1+a0+101a1+102a2+

テンプレート:Mvar の首位を テンプレート:Mvar とする。つまり、テンプレート:Mvarテンプレート:Math を満たす最小の テンプレート:Mvar とする。また便宜上 テンプレート:Math テンプレート:Math とする。

テンプレート:Mathテンプレート:Math の位より上(かみ)の位 テンプレート:Mvar は分かっているとし、テンプレート:Math の位 テンプレート:Mvar を求めるとする。すなわち

pm=k=m+1n10km1ak=10nm1an+10nm2an1++10am+2+am+1

とおく。

正方形ABCD の面積は テンプレート:Math, 青い正方形の面積は テンプレート:Math で、橙色と桃色の部分の面積の和が テンプレート:Math である。テンプレート:Mvar の値はすでに決まっていて、テンプレート:Mvar をどこまで大きく取れるのかが問題である。

テンプレート:Mvarテンプレート:Math を満たす最大の テンプレート:Mvar、すなわち

テンプレート:Math … (1)

を満たす最大の テンプレート:Mvar である。これを見つける。

テンプレート:Mvar の値は テンプレート:Math から テンプレート:Math までの 10 通りなので、順に試していけば テンプレート:Mvar は求まる。
テンプレート:Math のとき、テンプレート:Math より
テンプレート:Math
テンプレート:Math のとき、
テンプレート:Math

テンプレート:Math より

am102mx100pm220pm
右辺の計算値により、テンプレート:Mvar の値の見当を付けることができる。

これにより テンプレート:Mvar が求まれば、

テンプレート:Math

の値が分かるから、

テンプレート:Math

を満たす最大の テンプレート:Math を見つければよい。

このようにして、帰納的に テンプレート:Mvar テンプレート:Math の値が求まる。

漸化式の簡略化

不等式(1) を簡略化する。「テンプレート:Math」を基数 テンプレート:Math と合わせるため テンプレート:Math とする。そのため

テンプレート:Math
テンプレート:Math

とおくと、不等式(1) は

テンプレート:Math … (1')

である。

テンプレート:Math
    テンプレート:Math
    テンプレート:Math … (2)

(1') を満たす最大の テンプレート:Mvar を求めるために、テンプレート:Mvar の整数部分 テンプレート:Mvar を、テンプレート:Math から求める。

テンプレート:Math とおくと、

テンプレート:Math
    テンプレート:Math
    テンプレート:Math
    テンプレート:Math

テンプレート:Math の整数部分は、テンプレート:Mvarテンプレート:Math の位を テンプレート:Mvar とすると、テンプレート:Math に等しい。したがって、

テンプレート:Math
    テンプレート:Math … (3)

(2), (3) から、(1') を満たす最大の テンプレート:Mvar を求めていく。

筆算による効率化

テンプレート:Mvar から不等式(1') を満たす最大の テンプレート:Mvar を求めていくには、筆算による帰納的計算が明確である。

                                              テンプレート:Mvar
               テンプレート:Math
                         テンプレート:Math
                   テンプレート:Underline     ↓    ↓
テンプレート:Mvar  テンプレート:Mvar           テンプレート:Math
テンプレート:Underline
    テンプレート:Math                               テンプレート:Math  
  1. テンプレート:Math から テンプレート:Math を引き、負とならない最大の テンプレート:Mvar を求める。(主算)
  2. 次の テンプレート:Math を求めるために、テンプレート:Math を求めておく。(副算)

具体的な計算方法

例として、ここでは テンプレート:Math の正の平方根 テンプレート:Math の小数表示を求める。初期値は、

漸化式による求値

まずは テンプレート:Math を求める。

テンプレート:Math
テンプレート:Math
テンプレート:Math を満たす最大の テンプレート:Math は、テンプレート:Math である。

次に、テンプレート:Math を求める。

テンプレート:Math
テンプレート:Math
テンプレート:Math を満たす最大の テンプレート:Math は、テンプレート:Math である。

テンプレート:Math を求める。

テンプレート:Math
テンプレート:Math
テンプレート:Math を満たす最大の テンプレート:Math は、テンプレート:Math である。

同様の計算を繰り返すと、各項の値は次の表のようになる。

テンプレート:Mvar テンプレート:Math テンプレート:Mvar テンプレート:Mvar テンプレート:Mvar テンプレート:Mvar
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

テンプレート:Mvar の値から

テンプレート:Math

である。

筆算による求値

テンプレート:Mvar の値は、先述の筆算による方法(開平法)によりさらに簡単に計算できる。

本節は、これまでに登場した漸化式の原理により筆算の手順を説明するが、筆算の手順だけを知りたいのであれば、漸化式による説明の箇所を読み飛ばしても差し支えない

テンプレート:Math の正の平方根 テンプレート:Math の小数表示を求める。

まず、テンプレート:Mvar の値を、小数点から2桁ずつ「ブロック」に分けて書く。

テンプレート:Math

左側に縦2つ等しい値を書き、積が左端のブロック (5) を超えない最大の値 (2) を見つける。ブロック (5) の上に見つけた値 (2) を書く。左の筆算を立て、下に和の計算結果 (4) を書く。ブロック (5) の下に、左の筆算の、和でなく積の計算結果(この場合は和と同じ テンプレート:Math)を書く。筆算を立て、差の計算結果 (1) をその下に書く。

                                         テンプレート:Math
                             テンプレート:Math        テンプレート:Math
積がテンプレート:Math以下の最大値→テンプレート:Underline←左の筆算の積
                       和→テンプレート:Math          テンプレート:Math←差

差の計算結果 (1) の右隣りに、上のブロック (63) を下ろす。左の筆算の末位に縦2つ等しい値を書き、積が下ろしてできた数 (163) を超えない最大の値 (3) を見つける。ブロック (63) の上に見つけた値 (3) を書く。左の筆算を立て、下に和の計算結果 (46) を書く。下ろしてできた数 (163) の下に、左の筆算の積の計算結果 (129) を書く。筆算を立て、差の計算結果 (34) をその下に書く。

                                            テンプレート:Math   テンプレート:Math
                                テンプレート:Math        テンプレート:Math
                                テンプレート:Underlineブロックを下ろす
                                テンプレート:Math        テンプレート:Math  テンプレート:Math
積がテンプレート:Math以下の最大値→テンプレート:Underline←左の筆算の積
                          和→テンプレート:Math            テンプレート:Math←差
テンプレート:Mathテンプレート:Math を満たす最大の テンプレート:Mathテンプレート:Math。この時 テンプレート:Math。次の計算のために、テンプレート:Math, テンプレート:Math を計算しておく。

同様の計算を(テンプレート:Math まで)行うと、次のようになる。

          テンプレート:Math
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math
テンプレート:Underline
テンプレート:Math

これより

テンプレート:Math

である。

検算してみると、

テンプレート:Math
テンプレート:Math

となり

テンプレート:Math

が確かに成り立つ。

珠算による開平法

珠算による開平法として次の方法がある。

  • 倍根法
  • 半九九法

根の定位

根の定位の仕方は次のようになる。

  • 平方が整数のとき:平方の一の位から左へ2桁ずつ区分して、その区分できた回数が、根の桁数となる。
  • 平方が帯小数のとき:平方の一の位から左へ2桁ずつ区分して、その区分できた回数が、根の整数の桁数となる。
  • 平方が小数のとき:平方の テンプレート:Math を2桁ずつ区分して、その区分できた回数が、根の小数点以下の テンプレート:Math の桁数となる。

倍根法

例:テンプレート:Math

テンプレート:そろばん 平方の一の位から左へ2桁ずつ区分して、根の桁数が2桁であることを調べる。(根の定位による)
テンプレート:そろばん 最後の区分された数 テンプレート:Math に含まれている平方根 テンプレート:Math を求めて、初根 テンプレート:Math を置き、初根 テンプレート:Mathテンプレート:Math 乗 (テンプレート:Math) を テンプレート:Math から引く。
テンプレート:そろばん 初根 テンプレート:Mathテンプレート:Math 倍の テンプレート:Math を、左に置き、その テンプレート:Math で残りの平方を割って、次根 テンプレート:Math を初根の隣りに置く。
テンプレート:そろばん 次根 テンプレート:Mathテンプレート:Math 乗 (テンプレート:Math) を引く。
テンプレート:そろばん 平方根は テンプレート:Math である。

半九九法

例:テンプレート:Math

テンプレート:そろばん 平方の一の位から左へ2桁ずつ区分して、根の桁数が2桁であることを調べる。(根の定位による)
テンプレート:そろばん 最後の区分された数 テンプレート:Math に含まれている平方根 テンプレート:Math を求めて、初根 テンプレート:Math を置き、初根 テンプレート:Mathテンプレート:Math 乗 (テンプレート:Math) を テンプレート:Math から引く。
テンプレート:そろばん 残りの平方 テンプレート:Mathテンプレート:Math で割る。(初根の テンプレート:Math 乗を引いたあと、いつも残りの平方を テンプレート:Math で割る)
テンプレート:そろばん テンプレート:Math で割った平方の残りを、初根 テンプレート:Math で割って次根 テンプレート:Math を求める。
テンプレート:そろばん 次根 テンプレート:Math の半九九 テンプレート:Math を引く。
テンプレート:そろばん 平方根は テンプレート:Math である。

脚注

テンプレート:脚注ヘルプ テンプレート:Reflist

関連項目

外部リンク