- 締切済み
正弦波の波形について
#include<math.h> #define M 1000 #define T 20 #difine PI 3.1415926 int i; double sig[M]; main(){ for(i=0;i<M;i++){ sig[i]=sin(((double)i/M)*T*2*PI); } } この正弦波の波形を8ビット、16ビットに直したいのですが 分かりません。教えて下さい。お願いします。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 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; }
- 締切済み
- C・C++・C#
- 正規乱数をエクセルに
正規乱数を発生させるプログラムを作ったのですが、これをエクセルに出力させるにはどのようにすればよいのでしょうか?すみませんが教えてください(__) #include<stdio.h> #include<stdlib.h> #include<math.h> void ran(double,double,double *); void main(void) { int i; double x; for(i=0;i<1000;i++){ ran(1.0,0.0,&x); printf("%f\n",x); } } void ran(double sig,double m,double *x) { double r1,r2; r1=rand()/32767.1; r2=rand()/32767.1; *x=sig*sqrt(-2*log(r1))*sin(2*3.141592*r2)+m; }
- ベストアンサー
- C・C++・C#
- 数値計算法を勉強しているんのですが…
Shimpson公式を用いて計算したときに何故mが大きいところで誤差が大きくなりました。プログラムは下に示しました。なぜこのような結果になったか分かりません。 #include <stdio.h> #include <math.h> #define PI 3.141592653589793 double sum(long m) { double n,sum,h,x; h=(PI/2)/m; sum=0; n=0;x=0; while( n<m ){ sum+=2*sin(x);/*項の加算*/ sum+=4*sin(x+h/2); n++; x+=h; } sum+=-sin(0)+sin(PI/2); sum*=h/6; return sum; } int main(void) { double s; long m; int i; m=1; for(i=0;i<8;i++){ s=sum(m); printf("%2d m=%10ld sum= %22.16e err= %22.16e \n",i,m,s,s-1.0); m*=10;/*次のmは10倍*/ } return 0; }
- ベストアンサー
- C・C++・C#
- Visial C++おけるπの使い方
自宅でCプログラミングの練習をするためVisial C++ 2008を使って プログラムをしています。y<sin(πx)となった時の 割合などを計算するプログラムで 「M_PIが定義されていない識別子です」 とでてきます。所持している本を参考にしてもM_PI=πとして用いる と書いてあり、math.hもインクルードしてるので原因が分からなくて 困ってます。Visial c++ではπの使い方には何か別の使い方がある のでしょうか?よろしくお願いします。 *↓が実際に作ったプログラムです。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(void){ int i,n,count=0; double x,y,r,error; srand((unsigned)time(NULL)); /*乱数の初期化*/ printf("How many trials?"); scanf("&d",&n); for(i=0;i<n;i++){ x=rand()/(RAND_MAX+1.0); y=rand()/(RAND_MAX+1.0); if(y<sin(M_PI*x)){ count++; } } r=(double)count/n; /*キャスト演算子を使用*/ error=2/M_PI-r; printf("Result is %f (Error: %f)\n",r,error); return 0; }
- ベストアンサー
- C・C++・C#
- Cのソースコード について
使用言語はCです。 #include<stdio.h> #include<math.h> int main(void) { double x = 0, y = 0; while (1) { double arg2 = M_PI / 90; int arg1 = 90; int Arg = 0, Len = 0; scanf_s("%d,%d", &Len, &Arg); if (Len == 0 && Arg == 0) { break; } else { arg1 -= Arg; arg2 += (arg1 % 360)*M_PI / 180; x += cos(arg2)*Len; y += sin(arg2)*Len; } } printf("%d\n%d\n", (int)x, (int)y); while (1) {} return 0; } このコードをvisual studio でコンパイルしようとすると、 M_PIは定義されていない とエラーになってしまいます。 M_PIはmath.hに含まれているということでつかったのですが・・・・
- ベストアンサー
- C・C++・C#
- C言語のプログラムについてです。
円を描くプログラムを作りたいのですが、条件としてpointを使わないでつくらなければなりません。あとそのプログラムについての説明もいるので、合わせて回答お願いします。pointを使うと↓のプログラムです。 #include<stdio.h> #include<math.h> int main(void); int main(void) { double point[2][2]; double r; double pi=3.14159; int i; onenpl(); space(-100.0,-100.0,100.0,100.0); printf("円を描きます\n"); printf("半径を入力してください\n"); scanf("%lf",&r); point[0][0]=r*cos(0.0); point[0][1]=r*sin(0.0); for (i=1;i<360;i=i+1) { point[1][0]=r*cos(pi/180.0*i); point[1][1]=r*sin(pi/180.0*i); line(point[0][0],point[0][1],point[1][0],point[1][1]); point[0][0]=point[1][0]; point[0][1]=point[1][1]; } closepl(); return(0); }
- ベストアンサー
- C・C++・C#
- 基本的なC言語のプログラム
C言語を勉強中です・・・ 0秒から1.0秒まで0.01秒刻みでデータ(s[i])を配列から表示させていく簡単なプログラムです。 0から0.2までは"30" 0.2から0.4までは"29" 0.4から1.0までは"30"と表示させたいのですが、 全て"30"と表示されてしまいます。 配列の仕方が悪いのでしょうか?? すごく基本的な質問かもしれませんが、どなたか分かる方、よろしくお願いします。 #include <stdio.h> #include <math.h> #define number0 (100) #define h (0.01) #define f1 (30.0) #define f2 (29.0) void main(void){ double s[number0]={0}; int i; double t; for(i=0; i<number0; i++){ t=h*i; if(0<=i<20){ s[i]=f1; } else { if (20<=i<40){ s[i]=f2; } else { s[i]=f1; } } printf("%g %g\n",t,s[i]); } }
- ベストアンサー
- C・C++・C#
- 離散コサイン変換について
Webにあるサンプルソースや書籍のソースを見て、 感じの違うソースなのですが、 以下のソースはDCTになっているのでしょうか? 書籍には、 Data[N]=1.2.3[.3.2.1<-付け足] して、2NでDFTすればよいとありました。 ですが、式を見てもそういう記述にはなっていません。 よろしくお願いします。 #include<stdio.h> #define _USE_MATH_DEFINES #include<math.h> int main() { double *Data; double *DataAfter; double *DataConvert; int DataLen; DataLen=16; Data=new double[DataLen*2]; DataAfter=new double[DataLen*2]; DataConvert=new double[DataLen*2]; for(int i=0;i<DataLen;i++) { Data[i]=1.5*i; } for(int i=0;i<DataLen;i++) { Data[DataLen+i]=Data[DataLen-1-i]; } for(int i=0;i<DataLen*2;i++) { DataAfter[i]=0; for(int j=0;j<DataLen*2;j++) { DataAfter[i]+=1.0*Data[i]*cos(M_PI*i*j/(DataLen*2)); } DataAfter[i]/=DataLen; } for(int i=0;i<DataLen*2;i++) { DataConvert[i]=0; for(int j=0;j<DataLen*2;j++) { DataConvert[i]+=1.0*DataAfter[i]*cos(-M_PI*i*j/(DataLen*2)); } DataConvert[i]*=DataLen; } for(int i=0;i<DataLen*2;i++) { printf("%d %f\t%d %f\t%d %f\n",i,Data[i],i,DataAfter[i],i,DataConvert[i]); } delete[] Data; delete[] DataAfter; delete[] DataConvert; getchar(); return 0; }
- ベストアンサー
- C・C++・C#
- 計算誤差について
こんばんは。去年までフォートランをやっていたため現在C言語に苦戦中です。以下のプログラムを書いたのですが計算誤差が出てしまいます。修正をお願いいたします。 #include <iostream.h> #include <math.h> int main (void) { double t,x,pi=4.0*atan(1.0); for(t=0.0; t<=20.0; t+=0.1){ x=double(sin(pi/3*t)); cout<<t<<" "<<x<<endl; } return 0; } この文はtの値を0.1ずつを変化させて正弦波を描こうと思って書いたプログラムです。t=3.0のときsin(180°)となりx=0.0になるのはずなんですが、そうはならず10の-15乗くらいの誤差が出てしまいます。どうしたら誤差をなくせれるでしょうか? また、フォートランではt=0.1d0というような表現をして計算誤差をなくしていたのですがC(++)にはこういった方法はないのでしょうか? ご教授よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- C言語を実行すると-infが出てきて困っています。
C言語を実行すると-infが出てきて困っています。 コンパイラはgccを使っています。 よろしくお願いします。 #include <stdio.h> #include <math.h> #include <stdlib.h> #define data 100//計算回数 double seiki(void)//正規乱数 { double n; double i; double y; double x1,x2; double sigma; double mean; double Pi = 2*asin(1); sigma = 1; mean = 0; { x1 = (double)rand()/(RAND_MAX); x2 = (double)rand()/(RAND_MAX); y = sigma*sqrt(-2*log(x1))*sin(2*Pi*x2) + mean; //printf("%f\n",y); } return (y); } int main(void) { double* price; int i, j, k; double a, b, c; //メモリ確保 price=(double*)malloc(sizeof(double)*data+10); for(i = 0;i<data;i++) { price[i+1] = price[i]+seiki(); printf("%lf\n",price[i+1]); } return 0; }
- ベストアンサー
- C・C++・C#
- トナー交換を行ったのですがエラーメッセージが表示されるため何度も装着しなおしましたが交換してくださいと表示される。
- Windows10で接続されているHL-L8250CDNプリンターのトナー交換時にエラーメッセージが表示されます。
- HL-L8250CDNプリンターでトナーを交換した際、エラーメッセージが表示され、交換を促されます。