・自分は今なにがしたいか
C言語で多倍長数を使用して円周率を求めたいです。
Machinの公式を使用して求めます。
『配布されたコードを実数に対応させ、小数点以下も表現できるように拡張する必要がある。
具体的には,配列中のある要素を整数部分の一の位に対応させ,その要素よりも右側(添字が大きい側)の要素
を順に小数第1 位,小数第2 位,· · · に対応させる』
まず拡張する部分で詰まっています。
--配布されたコード--
void set(int value, int a[], int n){
int i;
for(i=n-1; i>=0; i--){
a[i] = value % 10;
value = value / 10;
}
return;
}
void tasu(int a[], int b[], int n){
int i;
for(i=n;i>0;i--){
a[i] = a[i] + b[i];
if(a[i]>=10){
a[i] = a[i] % 10;
a[i-1]++;
}
}
}
void hiku(int a[], int b[], int n){
int i;
for(i=N-1; i>=0;i--){
a[i] = a[i] - b[i];
if(a[i]<0){
a[i-1]--;
a[i] = a[i] + 10;
}
}
return;
}
void kakeru(int a[], int n, int k){
int i,tmp;
int carry = 0;
for(i=N-1;i>=0;i--){
tmp = a[i] * k + carry;
a[i] = tmp % 10;
carry = tmp/10;
}
return;
}
void waru(int a[], int n, int x){
int i,tmp;
tmp = 0;
for(i=0; i<N; i++){
tmp = tmp*10 + a[i];
a[i] = tmp / x;
tmp = tmp % x;
}
}
------------------------------------------------------------------------
(注意)以降では,数値x を多倍長数として表現したものを「多倍長数(x)」,int 型として表現したものを「int 型(x)」と表記する.「多倍長数(x) ←1」という書き方は,「多倍長数として表現した変数x(配列x)に1 を格納する」という意味である.
/*左のΣを計算*/
多倍長数(a) ←0
■n を0 からN まで1 ずつ増やしながら,以下の処理を繰り返す
•多倍長数(t) ←1
•多倍長数(t) ←多倍長数(t) ÷ int 型(2n + 1)
■2n + 1 回,以下の処理を繰り返す
•多倍長数(t) ←多倍長数(t) ÷ int 型(5)
▲n が偶数ならば
•多倍長数(a) ←多倍長数(a) + 多倍長数(t)
そうでないならば
•多倍長数(a) ←多倍長数(a) − 多倍長数(t)
•多倍長数(a) ←多倍長数(a) × int 型(4)
/* 右の∑ を計算*/
•多倍長数(b) ←0
■n を0 からN まで1 ずつ増やしながら,以下の処理を繰り返す
•多倍長数(t) ←1
•多倍長数(t) ←多倍長数(t) ÷ int 型(2n + 1)
■2n + 1 回,以下の処理を繰り返す
•多倍長数(t) ←多倍長数(t) ÷ int 型(239)
▲n が偶数ならば
・多倍長数(b) ←多倍長数(b) + 多倍長数(t)
そうでないならば,
・多倍長数(b) ←多倍長数(b) − 多倍長数(t)
/*最後の仕上げ*/
• 多倍長数(a) ←多倍長数(a) − 多倍長数(b)
• 多倍長数(a) ←多倍長数(a) × int 型(4)
• 多倍長数(a) の内容を表示
------------------------------------------------------------------------
よろしくお願いいたします