• 締切済み

サイン、コサインの精度

初心者です。 サイン、コサインを使ってプログラムを書いていたのですが、 精度が悪くて話になりません。 誰か助けてくださ~い。 プログラム ↓ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> #include <math.h> int main(){ double angle = 0; printf("\nangle = %f",angle); printf("\nsin(angle)-%f , cos(angle)-%f",sin(angle),cos(angle)); angle = 90; printf("\nangle = %f",angle); printf("\nsin(angle)-%f , cos(angle)-%f",sin(angle),cos(angle)); angle = 180; printf("\nangle = %f",angle); printf("\nsin(angle)-%f , cos(angle)-%f",sin(angle),cos(angle)); angle = 270; printf("\nangle = %f",angle); printf("\nsin(angle)-%f , cos(angle)-%f",sin(angle),cos(angle)); angle = 45; printf("\nangle = %f",angle); printf("\nsin(angle)-%f , cos(angle)-%f\n",sin(angle),cos(angle)); return 0;} ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー コンパイル後 ↓ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [~@~]$ gcc -o try2.exe try2.c -lm [~@~]$ ./try2.exe angle = 0.000000 sin(angle)-0.000000 , cos(angle)-1.000000 angle = 90.000000 sin(angle)-0.893997 , cos(angle)--0.448074 angle = 180.000000 sin(angle)--0.801153 , cos(angle)--0.598460 angle = 270.000000 sin(angle)--0.176046 , cos(angle)-0.984382 angle = 45.000000 sin(angle)-0.850904 , cos(angle)-0.525322 [~@~]$ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー OSは Fedora Core 6 です。 あんまり詳しいことにはなれてません。

みんなの回答

  • TT414
  • ベストアンサー率18% (72/384)
回答No.5

Ano.1,3,4の通りなのですが、πに関しては、math.h内の「PI」または「M_PI」などのマクロを使ってください(PI,M_PIなどの名前は、コンパイラによっては違います)。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★度→ラジアンの変換式は  ラジアン角=(円周率/180) * 角度  ↑  のようになります。 ・よって  pi = 3.14159265358979;  angle = 90.0 * pi / 180.0;  printf( "\nangle = %f", angle );  printf( "\nsin(angle)-%f , cos(angle)-%f", sin(angle), cos(angle) );  ↑  他の角度も同様にラジアンに変換してから angle に代入して下さい。 ・以上。

全文を見る
すると、全ての回答が全文表示されます。
  • fatbowler
  • ベストアンサー率48% (26/54)
回答No.3

ANo.1が正解でしょう。 精度が悪いのではなく、角度の指定が間違っています。 180゜=3.1415926535 等で指定してあげれば、精度よく表示されるはずです。

全文を見る
すると、全ての回答が全文表示されます。
  • splwtr
  • ベストアンサー率16% (75/461)
回答No.2

求めてる精度は? 話にならないなら、使わない。 以上。

全文を見る
すると、全ての回答が全文表示されます。
  • Evreux
  • ベストアンサー率29% (225/774)
回答No.1

angle=180; などとされていますが、これは180度のつもりでしょうか? ここには角度をラジアンで代入すべきです。 180°=π(パイ) と換算してください

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語にてsin,cosは何?

    C言語でsin、cosを計算したところ、答えが違っていました。 netで探したところ<math.h>をincludeしていないせいだとわかったのですが、 <math.h>を指定しなかったら何を計算しているんでしょうか? Visual Studio 2013 win7 #include<stdio.h> #include <math.h> int main(void){ printf("結果=%f\n",sin(0.5)); }

  • 日立マイコンのSH2で、sinやcosを使いたいのですが・・・

    SH2で、sinやcosを使いたいのですが、math.hをインクルードしてもコンパイルエラーが出てしまいます。ライブラリの設定がよくないと思うのですが、設定のしかたがわかりません。使っているコンパイルソフトは、GCC Developer Liteという、フリーのコンパイラーです。お願いします。

  • 学校の課題で

    sin,cos,tanを0~90度を出せっていわれたのですが #include <stdio.h> #include <math.h> main() { int N; float x; char *line="-------------------------------------\n"; printf(line); printf("%3s %5s %10s %13s \n", "kakudo", "sin","cos","tan"); for(N=0; N<=90; ++N) { x=N*3.14159265358979323846264338327950288/180; if(N%10==1) { printf(line); } if(N=90) { tan(N)= ; } printf("%3d %7.6f %10.6f %13.6f \n", N, sin(x), cos(x), tan(x)); } printf(line); } で出ません。 間違いは if(N=90){tan(N)= ;} の部分なのですが、どうすれば出せますか?

  • 関数を使ったプログラミング

    プログラミングの勉強をして、詰まってしまいました。 以下のプログラムで間違っている原因を教えてください。 物体を初速度と仰角から水平到達距離を求めるのが目的です。 ビルドするとありえないくらいの大きな数になってしまいます。 よろしくおねがいします。 「 #include <math.h> #include <stdio.h> double hdist( double velocity, double angle){ double a,G,L; a=3.14*angle/180; G=9.8; L=velocity*velocity*sin(2*a)/G; return(L); } int main(void){ double na,nb; puts("値を入力してください。"); printf("初速度 velocity(m/s):"); scanf("%f",&na); printf("仰角 angle 度:"); scanf("%f",&nb); printf("水平到達距離は%.2fmです。", hdist(na,nb)); return (0); } 」

  • C言語について教えてください。

    C言語について教えてください。 C言語ソフト「C言語をはじめよう」で、sin,cos,tanを求めたり、計算(sin=cos*tanや、sin^2(sinの二乗)+cos^2(cosの二乗)=1や、cos=sin/tan,tan=sin/cos)するプログラムを作りたくて、ネットを見たのですが、全然意味がわかりません。 また、√(平方根)の表示や、計算する(1/√3^2(√3分の1の二乗)*√3見たいな計算)プログラムを作りたいと思いますが、こちらも同様です。 #include<stdio.h> #include<math.h> int main(void) ここまではわかりますが、ここから先がわかりません。 どなたか。詳しくわかりやすく、入力例などをよろしくお願いします。 また、上記のプログラムや、書き方が違いましたら、こちらもご指摘お願いします。 なるべく早く、ご解答ください。

  • math.h

    C言語で以下のプログラムを打ちました #include <stdio.h> #include <math.h> main(){ printf("%f\n",sin(23.5)); } そして。下記の用に実行すると以下のようにエラーがでます。エラーからするにサイン関数が見つからない用な事いっているのですが、一体なん何んでしょう? ちなみに。OSはRed hut Linux 7.3です. % gcc -o sample sample.c /tmp/ccwod1zy.o: In function `main': /tmp/ccwod1zy.o(.text+0x17): undefined reference to `sin' collect2: ld returned 1 exit status

  • sinの値を求めるプログラムで質問です。

    sin(x)の値を求めるプログラムで質問です。 cos(x)の値をcosのテーラー展開の式から求めるプログラムを作り、無限級数の項の絶対値が0.00001以下になったら打ち切って、コンピュータで定義されるcos(x)の値との差を 0.0≦x≦0.1 の範囲で0.01刻みに求めよ。ただし、結果はファイルに書き出すこと。 という問いがあり、プログラムは下記のようなものだったのですが、 #include <stdio.h> #include <math.h> double COS(double x); int main(void) { double a; FILE *fout; fout=fopen("file1.txt","w"); for(a=0;a<0.1;a=a+0.01) { fprintf(fout,"a=%f COS=%e cos=%e error=%e\n",a,COS(a),cos(a),COS(a)-cos(a)); } return 0; } double COS(double x) { double t; double y; int n; y=1.0; t=1.0; n=1; while(1) { t=-t*x*x/((2*n)*(2*n-1)); if(fabs(t)<=0.00001) break; y=y+t; n++; } return y; } これが、例えば、cos(x)ではなくsin(x)についてだった場合、上記の最初に書いてある条件もまったく同じでプログラムを作ったとすると、上記のプログラムのどこを変えればいいのでしょうか。どなたか教えてください。

  • sinの値を求めるプログラムでお聞きします。

    cos(x)の値をcosのテーラー展開の式から求めるプログラムを作り、無限級数の項の絶対値が0.00001以下になったら打ち切って、コンピュータで定義されるcos(x)の値との差を 0.0≦x≦0.1 の範囲で0.01刻みに求めよ。ただし、結果はファイルに書き出すこと。 という問いがあり、プログラムは下記のようなものだったのですが、 #include <stdio.h> #include <math.h> double COS(double x); int main(void) { double a; FILE *fout; fout=fopen("file1.txt","w"); for(a=0;a<0.1;a=a+0.01) { fprintf(fout,"a=%f COS=%e cos=%e error=%e\n",a,COS(a),cos(a),COS(a)-cos(a)); } return 0; } double COS(double x) { double t; double y; int n; y=1.0; t=1.0; n=1; while(1) { t=-t*x*x/((2*n)*(2*n-1)); if(fabs(t)<=0.00001) break; y=y+t; n++; } return y; } これが、例えば、cos(x)ではなくsin(x)についてだった場合、上記の最初に書いてある条件もまったく同じでプログラムを作ったとすると、上記のプログラムのどこどのように変えればいいのでしょうか。 分からなくて困っています。助けてください。

  • sinのプログラム

    #include<stdio.h> #include<math.h> #define NMAX 100 main(){ float eps,x,t,s; int n; printf("Taylor series\n"); scanf("%g",&eps); printf("eps=%g\n",&x); for(;scanf("%g",&x)!=EOF;){ printf("\nx=%g\n n\tt\t\ts\n",x); t=s=1; for(n=1;n<NMAX;n++){ t*=X/n; s+=t; printf("%2d %15.6e %15.6e\n",n,t,s); if(fabs(t)<eps) break; } if(n>=NMAX) printf("---not converged ---\n); printf("exp(%g)=%g\tn=%d\n",x,s,n); } return(0); } これはeの級数展開をもとめるプログラムなのでが、これをsinの級数展開のプログラムに改造しろという問題があります。 sinのn乗の項を求めてeの部分と置き換えてやってみたのですができません。 どなたかわかる方がいましたら、教えてください。

  • 三角関数

    #include<math.h> を宣言していますが三角関数(sin(),cos(),tan())が使えません。これはどうしてでしょうか?