4

私は、いくつかの最も基本的な c 関数にしかアクセスできないコーディング環境にいます。他のライブラリを #include することはできません。

この環境では、rand() を呼び出すことができます。これにより、私の環境では 0 から 32767 までの乱数が包括的に (私が思うに) 返されます。次のコードは、rand() のように/として均等に分散されたより大きな乱数を取得する正しいロジックですか?

rnum = rand() * (32767 + 1) + rand();

4

4 に答える 4

2
static unsigned long next = 1;
int my_rand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % (RAND_MAX+1));
}

void my_srand(unsigned int seed) {
    next = seed;
}

Linux で

#define RAND_MAX    2147483647

あなたの環境 RAND_MAX はおそらく 32767 です

参照: http://en.wikipedia.org/wiki/Linear_congruential_generator

メモリに制約がない場合は、http://en.wikipedia.org/wiki/Mersenne_twisterも参照できます。コードは上記の例のように埋め込み可能です。

于 2013-04-26T23:36:49.953 に答える