どんなに桁数が長くても、整数同士の四則計算等を誤差なくやってくれる関数の紹介。

何百桁とか、長い整数を扱うのにいまのコンピュータは得意ではない。実数でも精度(いわゆる有効桁数)もそれほど高く保もたれていない。皆さんの普段使ってる電卓でもそう。液晶の表示部分は10桁とか、それぐらい。100桁も表示する電卓なんてないし、内部的にも有効桁数を沢山取って計算しているわけでもない。

しかし、われわれ普段習ってる数学では、数の有効桁数とか、使う範囲とかは考えない。理想的なものとしか扱わないから。無限大という数もふつうに使える。コンピュータでは絶対無理だけどね。

つまり、われわれ人間は数を概念的・記号的に思考するのは得意だが、ちょっとした計算、例えば、5,6桁の数同士の掛け算・割り算でもなかなか速くできないし、よく間違う。一方、コンピュータは計算が超得意だけど、記号とかになると苦手になることが多い。そう考えれば、人間とコンピュータとの合体、超高性能なコンピュータを腕時計や携帯のように、いつも持ち歩き、使うくことができれば、あるいは、人体に直に埋め込むことができれば、凄いことになりそう。

<関数名>
  mpAdd —- 多倍長整数同士の加算

<形式>
  void mpAdd(int *ret, int *a, int *b);

<引数>
  ret (出力) 多倍長整数同士の加算の結果(a + b)
  a, b (入力) 多倍長整数

<関数値>
  なし

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

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

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

<関数本体>
  mpAdd.c

<説明>
  10進数の計算と同じように、下語より加えていく。和が10000 を超えたら桁上がりが発生し、上の語に1を余分に加える。

Comments are closed.

Post Navigation