dポイントプレゼントキャンペーン実施中!

課題で、「n 番目の値が、1*10^-8 よりも小さくなるまでの級数を求め任意のxに対するsinxの値をマクローリン展開を利用して近似せよ。」というものが出たので、プログラムを作成してみたのですが、間違った値が出力されてしまいます。以下にプログラムを示しますので、間違っている点の指摘をお願いします。

#include<stdio.h>

int main(void)
{
long double a,b,c,d,n,x,ans,xx;
ans = 0;
a = c = d = 1;

printf("xを入力");
scanf("%lf",&x);
b = x;

for(n = 1; d >= 1e-8; a *= (n - 1) * n , b *= xx){
xx = x * x;
d = b / a;
ans += (b * c)/a;
c *= -1;
n += 2;
}
printf("%.8f",ans);
return 0;
}

A 回答 (4件)

double型では精度が足りないのでしょうか。


long double型を使うのであれば#1の回答で指摘されたように、%lfや%fではなく%Lfを使うべきです。
(もしや、xの値をラジアン単位ではなく、度の単位で与えていたりしませんか)
    • good
    • 0
この回答へのお礼

>>もしや、xの値をラジアン単位ではなく、度の単位で与えていたりしませんか
その通りでした!ありがとうございます!

お礼日時:2012/07/11 23:23

手元で確認しましたが, for の a *= (n-1)*n で処理されているのでそこは問題ないはずです>#2.



なんで n が int じゃないんだろうかという疑問は残りますが.
    • good
    • 0
この回答へのお礼

xを度で入力していました・・・回答ありがとうございました!

お礼日時:2012/07/11 23:24

sinのマクローリン展開はn番目の係数が1/(2n-1)! ではありませんか?


1/(2n-1) になってる気がします。
    • good
    • 0
この回答へのお礼

xを度で入力していました・・・回答ありがとうございました!

お礼日時:2012/07/11 23:24

とりあえず scanf と printf

    • good
    • 1
この回答へのお礼

xを度で入力していました・・・回答ありがとうございました!

お礼日時:2012/07/11 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A