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.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] );
}
---- ここまで ----
期待通りの度数分布でしょうか
たいていは違うと思いますよ ・・・
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;の意味するところを教えていただきますか?
お探しの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ランキング
-
C言語
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
if と配列の組み合わせ
-
#define _CRT_SECURE_NO_WARNIN...
-
実数の整数部,小数部の取得
-
C言語 エラーの原因がわからな...
-
数字列を3桁ごとにカンマで区切...
-
異なる文字列のマッチングを、D...
-
C言語での奇数の和
-
複数桁10進数の*桁目だけを抽出...
-
C言語の基礎 . 2乗値の差につ...
-
入力を待たずにstdinの監視をし...
-
比較回数と交換回数表示について
-
c言語 問題
-
c言語の配列を使ってサイコロを...
-
systemの戻り値を取得する方法
-
構造体の勉強中です 合計点の高...
-
アスタリスクでダイヤ型を作る
-
卒業研究でよく分からないとこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報