RAND()関数は ((double)rand() / (1.0 + RAND_MAX))と定義します。
中心極限定理により、一様乱数を足し合わせると正規分布に近づくことから、
x = 分散 * (Σ[1~12]RAND() - 6) + 平均
で正規乱数が作れる。標準正規分布は分散1、平均0なのでその乱数は
x = Σ[1~12]RAND() - 6
ですよね。この乱数を例えば100個羅列するにはどうしたらいいのでしょうか?
もし間違ってたら指摘してください。
参考文献「Cによるシミュレーションプログラム 石川宏」
#include <stdio.h>
#include <stdlib.h>
#define RAND() ((double)rand() / (1.0 + RAND_MAX))
#define NUMBER 10000 /* 発生させる乱数の数 */
main(void)
{
int j;
double u, x;
srand(5);
for (j = 0; j <= 11; j++) {
u = u + RAND();
}
x = u - 6.0;
}
No.1ベストアンサー
- 回答日時:
単に乱数発生部分をループで囲んだだけですが、これで良いのでは。
#include <stdio.h>
#include <stdlib.h>
#define RAND() ((double)rand() / (1.0 + RAND_MAX))
#define NUMBER 10 /* 発生させる乱数の数 */
int main(void)
{
int i;
int j;
double u, x;
srand(5);
for(i=0 ; i<NUMBER ; i++)
{
u = 0;
for (j = 0; j <= 11; j++) {
u = u + RAND();
}
x = u - 6.0;
printf("%f\n" , x);
}
return 0;
}
ありがとうございいます。
このu=0;がなかったから自分でもうまくいかなかったんだと思いますが、
このu=0;の意味するところを教えていただきますか?
No.3
- 回答日時:
乱数自体の分布が正規分布になるのでしょうか ・・・
発生させた乱数がある確立になる分布なら正規分布に近いと思いますけど
乱数自体の羅列をしたって意味が無いように思いますよ
RAND() の定義は 0以上1未満の倍精度実数を発生させているだけですよね
でしたら 0から15までの整数乱数で代用しても同じことなので
--- ここから ----
int ar[16] = {0};
int da[100] = {0};
int m = 0;
for ( int n=0; n < 100; n++ ) {
m = rand() % 16;
da[n] = m;
ar[m]++;
}
// 乱数の発生頻度を表示
for( n=0; n < 16; n++ ) {
printf( "%3d : %4d\n", n, ar[n] );
}
---- ここまで ----
期待通りの度数分布でしょうか
たいていは違うと思いますよ ・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 数学 以下の数学の問題を教えてください。 確率変数Xは標準正規分布N(0、1)に確率変数Yは平均3のポアソ 3 2022/12/02 19:13
- 統計学 統計学 最大値の標準偏差 15 2023/02/02 18:36
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- 統計学 母集団分布を平均 μ, 分散 σ2 の正規分布と想定し, 母集団から無作為抽出した標本のデータ(標本 4 2023/01/30 20:25
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
std::set<int> で、ある値が何...
-
「指定されたキャストは有効で...
-
数字列を3桁ごとにカンマで区切...
-
比較回数と交換回数表示について
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
実数の整数部,小数部の取得
-
c言語
-
C言語
-
卒業研究でよく分からないとこ...
-
main関数以外での結果の表示?
-
各桁の和を返す関数
-
C言語での引数の省略方法
-
(int *)の意味
-
C++でvectorにテキストファイル...
-
if文について
-
プログラミング c言語
-
マルチスレッドでバグが発生します
-
【C++】関数ポインタの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報