Home > C言語 > 乱数のメモ

乱数のメモ

ある範囲の乱数を作成する場合、PHPならメルセンスツイスターというアルゴリズムを利用したmt_rand()を使えるので困らない。たぶん。

しかし、Cだと困る。例えば0~100の乱数を作りたい場合、


int num;
num = rand()%100;

ってやりたくなるが、これだと乱数とは思えない数字が生成される。
特に0~1としてみたら、そのひどさがわかる。


for (i = 0; i < 100; i++) {
    num = rand()%2;
    print("%d\\n", num);
}

たぶん、0と1が交互に出るんじゃないかと思う。
で、どうしたらいいかというと、もっとちゃんとした乱数発生アルゴリズム、つまりメルセンスツイスターを使えばいい。
ということになりますが、そこまでたいそうな話じゃない場合、簡単な変換式で対応できます。
このページ
がとっても参考になるんですが、いつもググって見つけてるのでメモしておいた次第です。
以下のような式です(こぴぺ)。


num = (int)((double)rand() / ((double)RAND_MAX + 1) * N);

あるいは


num = rand() / (RAND_MAX / N + 1);

Nは整数で、上記の例の10とか2。RAND_MAXは乱数の最大値。たぶん定義されてると思う。

以上

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=95
Listed below are links to weblogs that reference
乱数のメモ from コスミー報告書[社外秘]

Home > C言語 > 乱数のメモ

Search
Feeds
Meta
 合計:018987
 今日:0126 昨日:0157

Return to page top