下記のプログラムの実行結果が、例えば101と入力すると”101まで計算した場合の pi の値: 0.000000”となり、piの値が正しく出力されません。様々な入力を試したところ、恐らくどのような入力値でもpiの値が0となってしまうようです。原因を見つけることができないので教えてください。
このプログラムでやりたいことを説明します。
大まかにいうと、pi=4*arctan1であるのでarctan1の値を関数により求め、piの値を出力したいです。その際、整級数展開のどのべき乗の項まで計算するかをキーボードからの入力で指定します。
プログラムに沿って細かく説明します。main関数では出入力のみ行います。arctan1=1 - 1/3 + 1/5 - 1/7 + ... であるので、hugou関数で各項の符号を求めます。それを利用してarctan関数でarctan1の値を求め、最後にmain関数でarctan1を4倍して出力しています。
math.hをincludeしてatanを使うという方法は使わずにお願いします。
入力された値の適切不適切の確認は省いています。
コード:
#include <stdio.h>
int hugou(int);
double arctan(int);
int main() {
int n;
printf( "級数の計算上限となる数を奇数で入力して下さい: " );
scanf( "%d" , &n );
printf( "%dまで計算した場合の pi の値: %.6f \n" , n, 4*arctan(n) );
return 0;
}
int hugou(int x) {
int i, _hugou=-1;
for ( i=1; i<=x; i++ ) _hugou *= -1;
return _hugou;
}
double arctan(int y) {
int i, tan1=0;
for ( i=1; i<=((y+1)/2); i++ ) tan1 += (double)hugou(i)/( 1 + 2*(i-1) );
return tan1;
}
下記のプログラムの実行結果が、例えば101と入力すると”101まで計算した場合の pi の値: 0.000000”となり、piの値が正しく出力されません。様々な入力を試したところ、恐らくどのような入力値でもpiの値が0となってしまうようです。原因を見つけることができないので教えてください。
このプログラムでやりたいことを説明します。
大まかにいうと、pi=4*arctan1であるのでarctan1の値を関数により求め、piの値を出力したいです。その際、整級数展開のどのべき乗の項まで計算するかをキーボードからの入力で指定します。
プログラムに沿って細かく説明します。main関数では出入力のみ行います。arctan1=1 - 1/3 + 1/5 - 1/7 + ... であるので、hugou関数で各項の符号を求めます。それを利用してarctan関数でarctan1の値を求め、最後にmain関数でarctan1を4倍して出力しています。
math.hをincludeしてatanを使うという方法は使わずにお願いします。
入力された値の適切不適切の確認は省いています。
[code]
#include <stdio.h>
int hugou(int);
double arctan(int);
int main() {
int n;
printf( "級数の計算上限となる数を奇数で入力して下さい: " );
scanf( "%d" , &n );
printf( "%dまで計算した場合の pi の値: %.6f \n" , n, 4*arctan(n) );
return 0;
}
int hugou(int x) {
int i, _hugou=-1;
for ( i=1; i<=x; i++ ) _hugou *= -1;
return _hugou;
}
double arctan(int y) {
int i, tan1=0;
for ( i=1; i<=((y+1)/2); i++ ) tan1 += (double)hugou(i)/( 1 + 2*(i-1) );
return tan1;
}
[/code]