ある範囲の乱数を作成する場合、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は乱数の最大値。たぶん定義されてると思う。
以上