1 から 99 の間の平方根の値を多桁数で算出する関数。多くの桁数の平方根が必要な時に利用するといいだろう。

平方根の算出は一般的に難しいけど、結果があっているかどうかの検証はものすごく簡単。2乗してみればすぐに判るからだ。円周率 π とは大違い。

では、関数の紹介。

<関数名>
  squareRoot —- 1 から 99 の間の平方根の値を多桁数で算出する。

<形式>
  int squareRoot(int *data, int keta, int n);

<引数>
  data (出力) 平方根の値が10進4桁ずつ入った整数の配列
  keta (入力) 小数点以下の桁数の指定
  n   (入力) 計算しようとする平方根の2乗の値 (1 〜 99)

<関数値>
  正常に計算できたときは、計算結果となる data の長さ。エラーのときは 0。

用例
  2 の平方根を小数点以下1000桁で求める例
  int data[1000];
  squareRoot(data, 1000, 2);

  2 の平方根の値 (小数点以下1万桁)
  3 の平方根の値 (小数点以下1万桁)
  5 の平方根の値 (小数点以下1万桁)
  6 の平方根の値 (小数点以下1万桁)
  7 の平方根の値 (小数点以下1万桁)
  8 の平方根の値 (小数点以下1万桁)
  10 の平方根の値 (小数点以下1万桁)

<関数本体>
  squareRoot.c

<説明>
  必要とする桁数以上に、以下の漸化式

      pi+1 = pi2 – 2
      qi+1 = pi qi

  を計算し、最後に、pi+1 / qi+1 で平方根を求める。

  なお、初期値 p0、q0ペル方程式 p02 – M q02= 4 を満たす整数解。ただし、M は計算しようとする平方根の2乗の値。

  数学的帰納法で証明できるが、上の漸化式で得られた pi+1、qi+1 により、

        pi+1 / qi+1 = (M + 4 / (pi qi)2)1 / 2

  となる。したがって平方根の計算において、本アルゴリズムの方法ではニュートン法等ほかの方法よりも効率がよく、数回の計算で必要とする精度のものが得られる。

Comments are closed.

Post Navigation