円周率
マチンの公式を用いて円周率を求めるプログラムを作ったのですが、微妙に(3.1423666...)間違っています。
たぶん、配列repynの初期設定が違っているのだと思いますが、どうすればいいのでしょう?
教えてください。
関数:
add 配列型のデータ同士を加算する。
subtract 配列型のデータ同士を減算する。
divide 配列型のデータとint型の変数を除算する。
確認してあるので、関数に間違いはないと思います。
int main(void)
{
int *repyn,*tn,*pi;
int i;
repyn=(int *)calloc(DIGIT,sizeof(int));
tn=(int *)calloc(DIGIT,sizeof(int));
pi=(int *)calloc(DIGIT,sizeof(int));
for(i=0;i<DIGIT;i++) *(pi+i)=0;
for(i=0;i<DIGIT;i++) *(repyn+i)=0;
*(repyn+1)=8;
*(repyn+2)=0;
i=1;
do{
divide(repyn,5*5,repyn);
divide(repyn,i,tn);
add(pi,tn,pi);
i+=2;
divide(repyn,5*5,repyn);
divide(repyn,i,tn);
subtract(pi,tn,pi);
i+=2;
}while(i<=CN1);
for(i=0;i<DIGIT;i++) *(repyn+i)=0;
*(repyn+0)=9;
*(repyn+1)=5;
*(repyn+2)=6;
i=1;
do{
divide(repyn,239,repyn);
divide(repyn,239,repyn);
divide(repyn,i,tn);
subtract(pi,tn,pi);
i+=2;
divide(repyn,239,repyn);
divide(repyn,239,repyn);
divide(repyn,i,tn);
add(pi,tn,pi);
i+=2;
}while(i<=CN2);
for(i=0;i<DIGIT;i++){
printf("%d",*(pi+i));
}
return 0;
}
補足
ありがとうございます。その展開係数をFFTをつかって求めたいのですがどうしたらいいのでしょうか?