10.6 モジュロ演算子と乱数

余りを使うと乱数から様々な範囲を限定した乱数を作ることが出来る。通常、 rand() で生成される乱数は0以上ある大きな整数値以下の間の任意の 整数になっている。しかし、サイコロを振ったと同じような結果を得たければ、 1,2,3,4,5,6 のどれかの整数になるような乱数が必要となる。これは余りを使う 事によって、実は簡単に得られる。つまり、rand() を6で割った余りを 考えれば良い。しかし、このままでは得られる余りは 0,1,2,3,4,5 であるので、 サイコロの場合とは一つだけ数がずれている。そこで、1を足してやればサイコロ と同じになる。例えば次の例のようにプログラムすれば良い。

    int  seed, dice;
    seed = 3;
    srand(seed);
    dice = rand()%6 + 1;    /* 1,2,3,4,5,6 のどれかになっている */
    printf("dice : %d\n", dice);

参考
実は、上のようにして求めたサイコロは本当に 1 から 6 までの数が同じ確率 で出るかどうかは確かではない。つまり、サイコロにイカサマがあるかも知れない のである。従って、厳密にすべての目が出る確率が同じであるようにするには、 もう少しきちんとした事をしなければならないが、実用上はまあこの程度でも良い であろう。



最初のページ 戻る 次へ 最後のページ 目次
Hiroyasu Asami