• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:0~2πの範囲を十等分して…)

0〜2πの範囲を十等分してsin(xn)の値を出力するプログラム

このQ&Aのポイント
  • 0〜2πの範囲を十等分して、sin(xn)の値を出力するプログラムを作成しています。
  • プログラムの実行結果で5と10のsin(xn)の値が異なります。
  • また、出力される値の表示が縦に揃っていません。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

処理系不明なので正確なことはいえませんが... おそらく画像の結果は、IEC559の単精度浮動小数点数で計算した結果だと思います。いずれにせよ、n=5およびn=10は本来0になるべきですので、計算誤差によって結果が異なるのは仕方がありません。 もうひとつの質問についてですが、書式を % .3e のようにすれば解決できます。ちょっと分かりにくいですが、%と.の間にスペースが入っています。

noname#90946
質問者

お礼

回答ありがとうございます。 誤差によるものなのですね。 とても納得できました^^ もうひとつの質問の方も、解決いたしました☆ ありがとうございました!!

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

関連するQ&A

  • 数値計算法を勉強しているんのですが…

    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; }

  • 期待値?平均?意味不明!

    統計の勉強をしていて????な内容に出くわし困惑しております。どなたかお知恵をお貸しください。 E(a1X1+a2X2+.....+anXn)=a1E(X1)+a2E(X2)+...+anE(Xn)・・・・(1) X1,X2,....,Xnが独立ですべて期待値μ、分散σ^2の同一分布に従い"a1=a2=...=an=1/n"の時 E(X1)=E(X2)=....=E(Xn)=μ E(X1/n+X2/n+....+Xn/n)=μ/n+μ/n+...+μ/n=μ X~=(X1+x2+....+Xn)/nとすると E(X~)=μ これまではいいんですが後に (1)の性質で"X1,X2,.....,Xn"が独立でどれも平均μとすると E(X~)=E(X1/n+X2/n+....+Xn/n) =E(X1)/n+E(X2)/n+...+E(Xn)/n =μ/n+μ/n+.....μ/n=μ と書いてありました。 μっていったい期待値なんでしょうか?平均なんでしょうか?それともどちらでもこのE(X~)=μは成立するのでしょうか? μが平均の場合はなぜE(Xk)=μ(kは第k項の意味です)とできるのか理由も付けて教えてください。 読みにくくてすみませんがよろしくお願いします。

  • 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に含まれているということでつかったのですが・・・・

  • 丸め誤差で

    #include <stdio.h> #include <math.h> /*級数に展開して計算*/ double x_sinx(double x) { double term,sum; int n; n=1; sum=0; term= x * x * x / ((2*n+1)*(2*n));/*初項*/ while( sum != sum + term){/*計算精度以下に収束するまでくり返す*/ sum+=term; n++; term*=-x*x/((2*n+1)*(2*n));/*次項の計算*/ } return sum; } int main(void) { double x; int i; x=1; for(i=0;i<9;i++){ printf("x=%10e x-sin(x)= %22.16e x_sinx(x)= %22.16e\n",x,x-sin(x),x_sinx(x)); x/=10;/*次のxは10分の1*/ } return 0; } のプログラムで誤差が生じた理由ってなんなんですか?

  • 高校数学の標本平均について 教えてください。

    母集団から大きさnの無作為標本を抽出しそれらの変量xの値をX1.X2.….XnとするときXバー=(X1+X2+…Xn)/nを標本平均という。標本平均Xバーの確率分布と母集団分布関係を調べよう。母平均m,母標準偏差σの母集団から大きさnの無作為標本を抽出しそれらの変量xの値をX1.X2.….Xnとする。各Xkはどれも大きさ1の標本で母集団分布に従う確率変数である。よってE(X1)=E(X2)=E(Xn)=m σ(X1)=σ(X2)=σ(Xn)=σであるしたがって E(Xバー)=mになる。 また復元抽出の場合はX1.X2.….Xnは互いに独立な確率変数であるから分散V(Xバー)={V(X1)+V(X2)+…+V(Xn)}/n^2というところがわかりません。 なぜn^2で割ることになるのですか? どなたか教えてください。お願いします。

  • ニュートン法

    ケプラー方程式x-e*sin(x)-c=0の解をステップ数とともに出力するプログラムで、e,cはそれぞれ0.5と1です。 xに値を入力して計算させるのですが、どうしてもできません。 下のプログラムリストでおかしいところはどこでしょうか? // ニュートン法 x-e*sin(x)-c=0 #include <stdio.h> #include <math.h> #define e 0.5 #define c 1.0 #define K 10000 double fun(double x); double bibun(int i,double x); float m=1.0,n=1.0; int i=1; main(){ float x1,x2; float z; printf("初期値x0を入力して下さい\n"); scanf("%f",&x1); for(i=0;i<=K;i++){ x2 = x1 - fun(x1)/bibun(i,x1); x1 = x2; z = fun(x1); z = fabs(z); if(fabs(z)<=0.00001){ break; } if(i==K){ printf("収束しません\n"); exit(0); }    } printf("解 = %f\n",x1); printf("ステップ数 = %d",i); return 0; } // 関数f(x) double fun(double x1){ double r; r = x1 - e * sin(x1) - c; return r; } // 微分 double bibun(int i,double x1){ float p; if(i%2==1){ p = pow((-1.0),m)*e*sin(x1); m++; } else { p = pow((-1.0),n)*e*cos(x1); n++; } return p; }

  • 【確率・統計】母平均、母分散について

    統計の質問です。 ある母集団からランダムにn個のサンプルX1,X2,...,Xnをとり、 その特性値x1,x2,...,xnを調べた。 ※「サンプルX1,X2,...,Xn」は大文字のX、 「特性値x1,x2,...,xn」は小文字のx。 この特性値について、母平均、母分散の不偏推定量を 求める式をn,X1,X2,...,Xnを用いて表しなさい。 という問題なのですが、 私の理解では、 『サンプルの「X1,X2,...,Xn」は それぞれ(母集団の分布に従った)確率変数であるから、 ばらつきがある。 そしていま、たまたま X1=x1(値), X2=x2(値), ...,Xn=xn(値)であった。』 という解釈をし、 (母平均)=(X1+X2+...+Xn)/n (母分散)={(X1^2)+(X2^2)+...+(Xn^2)-n*{(X1+X2+...+Xn)/n}^2}/(n-1) と答えを出したのですが、この解釈は正しいでしょうか? 自信が持てずにいるので、 ご指摘、アドバイス等ありましたら、 どうかよろしくお願いいたします。

  • visual C++だとコンパイルできるのに、borlandだとできません。

    borlandと、VisualC++の両方使っているのですが、VisualC++だとコンパイルでき、実行できます。 しかし、Borlandでコンパイルしようとすると、「宣言が正しく終了していない」とエラーが出てしまいます。 学校の課題で、Borlandでコンパイルしたいのですが、どうすればいいのか分かりません。 ソースを載せるので、どこがいけないのか、教えてください。 sin(x)の値を入力して、x度を求めるプログラミングです。 #include<stdio.h> #include<math.h> int main(void) { double x_mid, x0=0, x1=90, y_mid, y0, y1, M_PI=3.14159265358979; float y_ans; printf("sin(x)はいくつ?\n"); scanf("%f", &y_ans); for( ; ;) { x_mid=0.5*(x0+x1); y0=sqrt(1-cos(M_PI*x0/180)*cos(M_PI*x0/180)); y1=sqrt(1-cos(M_PI*x1/180)*cos(M_PI*x1/180)); y_mid=sqrt(1-cos(M_PI*x_mid/180)*cos(M_PI*x_mid/180)); if(y0-y_ans>0 || y1-y_ans<0) { printf("答えが出ません。もう一度sin(x)は?\n"); scanf("%f", &y_ans); continue; } if(fabs(y0-(double)y_ans) <= 0.000000001) break; else if((double)y_ans < y_mid) { x1=x_mid; } else { x0=x_mid; } } printf("sin(x)=%fのとき、xは%f度\n",y_ans, x0); return 0; }

  • 桁落ちのプログラムで真の値と計算結果

    #include <stdio.h> const double PI=3.141592653589793; double sum(long m) { double n,term,sum; n=1; sum=0; term= 1.0/ (n*n);/*初項*/ while( n<=m ){ sum+=term; n++; term= 1.0/ (n*n);/*次項の計算*/ } return sum; } /*この計算の答えはπ*/ int main(void) { double s; long m; int i; m=1; for(i=0;i<9;i++){ s=sum(m); printf("%2d m=%10ld sum= %22.16e err= %22.16e \n",i,m,s,s-PI*PI/6); m*=10;/*次は10倍にする*/ } return 0; で真の値と計算結果を調べるにはどうしたらいいのでしょうか?

  • C言語 unsigned 表示

    #include<stdio.h> int count_bits(unsigned x){ int count=0; while(x){ if(x&1U){ count++; } x>>=1; } return count; } int int_bits(void){ return(count_bits(~0U)); } unsigned rrotate(unsigned x1 ,int n){ int bits=int_bits(); n%=bits; return(n? (x1>>n)|(x1<<(bits-n)):x1); } int main (void){ unsigned nx,b; b=rrotate(nx,2); printf("%u\n",b); return(0); } 3221225476や1073741829と表示されることがあります。 入力値を4で割った数を表示するには、どうしたらよいでしょう・ 御指摘お願いします。