桁数の長い整数同士の割り算。

整数の世界から逃げ出す不思議な計算。実数の世界に通じるトンネルのようなものかな。計算結果としての有理数、無理数。言葉の遊びとも受け止められるかもしれないけど、大変深い洞察に基づく概念。

<関数名>
  mpDiv —- 多倍長整数同士の除算

<形式>
  int mpDiv(int *q, int *r, int *a, int *b);

<引数>
  q   (出力) 多倍長整数同士の除算の商
  r   (出力) 多倍長整数同士の除算の余り
  a, b (入力) 多倍長整数 (a が被除数、b が除数)

<関数値>
  正常に計算できたときは 0。失敗したときは -1。除数が 0 のときは -2。

<注意事項>
  配列の各要素 ai(i は 1 以上)は1語を表し、1語で表し得る最大の整数は 9999 。語の長さは a0 の値で表す。すなわち、多倍長整数は

      anKn-1+an-1Kn-2+…+a2K+a1

   で表現する。ただし、K=10000、n=a0
  
用例
  本関数以外に、キー入力に 関数 mpStr2Num()数字列を多倍長整数に)、画面表示に 関数 mpNum2Str()多倍長整数を数字列に)も使う。

<関数本体>
  mpDiv.c

<説明>
  除算は四則演算の中に最もやっかいな計算である。ほかの演算と異なる点は、商の各桁の値の「見当をつける」という操作が含まれる点である。なるべく少なく手間で、適切な商の候補をみつけることが、プログラムの繁雑さを増してしまう。

Comments are closed.

Post Navigation