###前提・実現したいこと
乱数を二つ生成し、Box-Muller法を用いて、平均1、分散4に従う正規乱数を生成するプログラムを作成し、乱数をn個生成し、標本平均値と標本分散をいくつかのnごとに求める。という課題で、作ってはみたもののエラーが出てしまい実行できません。エラーの原因を教えていただければ助かります。
###発生している問題・エラーメッセージ
「30行目」で記述エラーを発見しました。 「constant expression」を付け忘れています。
###該当のソースコード
#include<stdio.h> #include<math.h> #include<stdlib.h> #define mu 1.0 #define sigma 2.0 #define PI 3.1415926535897932384626433832795 void Random(double I, int n, double *R){ int a, k; long m; a = 69621; m = pow(2, 32); for (k = 0; k<n; k++){ I = a*I - floor(a*I / m)*m; R[k] = I / (m - 1); } } int main(void){ int i, k, n; double total, v, aver, disp; printf(" n average dispersion"); for (k = 1; k <= 10; k++){ n = k * 500; double u1[n], u2[n], x[n], X[n]; //エラー箇所です Random(1.0, n, u1); Random(2.0, n, u2); for (i = 1; i<n; i++){ x[i] = sqrt(-2 * log(u1[i]))*cos(2 * PI*u2[i]); X[i] = sigma * x[i] + mu; } total = 0; for (i = 1; i < n; i++){ total += X[i]; aver = total / n; } v = 0; for (i = 1; i<n; i++){ v += (aver - X[i])*(aver - X[i]); disp = v / n; } printf("%d %f %f\n", n, aver, disp); } return 0; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/28 04:26