• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の、sinxのマクローリン展開を教えて下さい)

C言語でsinxのマクローリン展開を求めるプログラムの作成方法

このQ&Aのポイント
  • C言語のsinxのテイラー(マクローリン)展開を求めるプログラムを作成する方法を教えてください。
  • プログラムでは、入力された整数nと実数xに基づいて、第n項までのsinxのテイラー展開の和を求めます。
  • 現在作成したプログラムでは、n=2とx=2の場合に正確な値が得られない問題があります。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • POMPUG
  • ベストアンサー率60% (3/5)
回答No.3

こんな感じ? 以下変更点 ・関数kaiを追加。階乗を計算。 ・変数mを追加。(2 * n + 1)を計算した結果を入れる ・変数sを追加。符号を表現する。 その他ちょこちょこ変わってます。 #include<stdio.h> #include<math.h> double kai(int n) { double k = 1.0; while(n > 1) { k *= n; n--; } return k; } int main(void) { int i, n, m; double x, kotae, tmp, s; printf("n=? \n"); scanf("%d",&n); printf("x=? \n"); scanf("%lf",&x); kotae = 0.0; for(i = 0 ; i < n ; i++) { m = (2 * i + 1); s = ((i % 2) == 0) ? 1.0 : -1.0; tmp = s * pow(x, m) / kai(m); kotae += tmp; } printf("sin%fの値は%lf\n", x, sin(x)); printf("sin%fのテイラー展開第%d項までの和は%f \n" ,x ,n ,kotae); return 0; }

noname#246158
質問者

お礼

有難うございます。 おかげで助かりました

その他の回答 (2)

回答No.2

>どうすればいいでしょうか? 手動デバッグのやり方と数列の基本を身につけてください。 n=0,x=2のとき forループ終了時、 tmp=1 , kotae=2 この時点でtmp=1が間違いであることに気付く必要がある。 tmp=x; に修正して n=1,x=2のとき forループ終了時、 tmp=x=2 , kotae=2 この時点で、for文のn=1かi<nの間違いに気付く必要がある。 修正して forループ終了時、 tmp=-x^3/(2*3) , kotae= ... 目の前に実行環境があるなら、手動デバッグでなくて、tmpも表示したり、for文の中で逐次表示すればよい。 数列でn=0やn=1を代入して確認するのは基本中の基本。 大学生なら、高校数学を復習した方がいい。

noname#246158
質問者

お礼

有難うございます。 助かりました

  • colder
  • ベストアンサー率43% (30/69)
回答No.1

tmp=1; // ここ違うんじゃないかい? tmp=x; // こうじゃね

noname#246158
質問者

お礼

助かりました。

関連するQ&A