生成一个从 0 到 10000000 的随机数

Ron*_*tro 0 c random numbers

如何生成从 0 到 1000000 的随机数?

我已经尝试过下面的代码,但它仍然给我从 0 到 32767 (RAND_MAX) 的数字:

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

int main(){
    int i,x;
    srand(time(NULL));
    for(i=0; i<10000; i++){
        int x = rand() % 10000000 + 1;
        printf("%d\n",x);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 5

[编辑] 最初的答案是 0 到 1,000,000。我现在看到它应该是 0 到 10,000,000。

由于rand()将给出至少 15 位的答案,rand()多次调用,移位 15 并对结果进行异或。最后修改 10,000,001。

unsigned long x;
x = rand();
x <<= 15;
x ^= rand();
x %= 10000001;
Run Code Online (Sandbox Code Playgroud)

分布非常平坦,但确实引入了非常小的偏差。经过 32768*32768 次迭代,每个x0 到 10,000,000 的值大约发生107.37 次。相反,它们的范围从 107 到 108 次。

将多个rand()调用结果与+*或 组合|将导致结果分布的显着偏差。

[编辑]

RAND_MAX对于 OP 的平台,是 32767 (0x7FFF)。C 规范说“RAND_MAX 宏的值应至少为 32767”。由于 RAND_MAX可能长于 15 位,因此在其他平台上使用时,重要的是使用^上面的运算符而不是|用于此代码。