0

私はCで簡単なコードを持っていて、真ん中に乱数生成コードがあります..問題は、その数が長期間同じままで、その後1つ上がることです! rand_pick は、C プログラムを 30 回以上実行して 5 になる可能性があり、最終的に 6 に変わります...その理由と、本当にランダムな 1 から 9 桁を生成する別の方法があるかどうかを知りたいと思いました。

int rand_pick;
srand (time(NULL));
rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));

どうもありがとう ;)

4

2 に答える 2

2

いいえ、数字は準ランダムである必要があります。次のコードスニペットを実行できます。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANDOM_COUNT 10000

int main(void) {
    int rand_count[10] = {};
    int rand_pick;
    int i;

    srand (time(NULL));

    // run number of experiments
    for(i = 0; i < RANDOM_COUNT; i++) {
        rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));
        rand_count[rand_pick]++;
    }

    for(i = 1; i <= 9; i++) {
        printf("%d => %.3f %%\n", i, rand_count[rand_pick] /((float) RANDOM_COUNT));
    }   
}  

10,000個の数字をランダムに選び、その分布を数えます。私は常に一様分布を取得します:

1 => 0.111 %
2 => 0.111 %
3 => 0.111 %
4 => 0.111 %
5 => 0.111 %
6 => 0.111 %
7 => 0.111 %
8 => 0.111 %
9 => 0.111 %
于 2012-09-26T05:51:37.607 に答える
1

プログラムで srand を 1 回だけ初期化したい場合。何らかの理由で 1 秒間に数回プログラムを実行している場合は、乱数ジェネレーターをシードするために別の場所 (Linux の /dev/random など) から乱数を取得する必要があります。

于 2012-09-26T05:39:39.683 に答える