• 締切済み

C言語 正弦関数の級数展開

はじめまして。 sinxの級数展開を7項まで取った場合と組み込み関数で求めたsinxの値の差を,0度から360度まで,プログラムを作成して求めよ、という問題があるのですが、300度まででとまってしまいます。 どなたか、わかる方がいまいたら、教えてください。 以下リストです。 #include <stdio.h> #include<conio.h> #include <math.h> const double pi=atan(1.0)*4; double kaijyo(int n) { double ret=1; for (int i=2;i<=n;i++) { ret*=i; } return ret; } double polSin(double theta,int order) { int i; double ret=theta; for (i=1;i<order;i++) { if (i%2==1) { ret-=pow(theta,(i*2+1))/kaijyo(i*2+1); } else { ret+=pow(theta,(i*2+1))/kaijyo(i*2+1); } } return ret; } int main() { int order=7; double rad,theta,trueVal,polVal; for (theta=0;theta<360;theta+=1.0) { rad=theta/180*pi; trueVal=sin(rad); polVal=polSin(rad,order); printf("%e\n",polVal-trueVal); } getch(); return 0; }

みんなの回答

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

printf("theta=%f, %e\n", theta, polVal-trueVal); などとしてthetaの値も表示してみましょう。 コマンドプロンプトを開き、バー上で右クリック、既定値を選択し、レイアウトタブを選択したら、画面バッファのサイズ(高さ)が300あたりになってるのではないですか? これを大きくしてみましょう。

rock128
質問者

お礼

ありがとうございます。きちんと表示されました。 途中から右上がりのグラフになったのですがこれで良いのでしょうか?

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

300というのはどうやって確認しましたか ファイルにリダイレクトして確認しないと画面がスクロールして確認できませんよ または出力にカウンタも表示するようにするとか

rock128
質問者

補足

回答ありがとうございます。 すみません補足です。 300度というのは間違いで、300個目の答え(sinxの級数展開と組み込み関数で求めたsinxの値の差)が出て終了しています。 確認はDOS画面(コマンドプロンプトみたいな画面?)が出てきたのをエクセルに移して数えただけです。

関連するQ&A