如果我想在0到1,000,000之间的C中生成 DIFFERENT 随机数,那么以下是否足够?
srand(time(NULL));
int k = (rand() % 1000000;
从我看到的输出中,只生成了大约32767个不同的随机数!
谢谢!
答案 0 :(得分:2)
rand int rand(void);生成随机数返回伪随机数 整数,范围在0到RAND_MAX之间。
RAND_MAX rand返回的最大值此宏扩展为 整数常量表达式,其值是返回的最大值 通过兰特功能。
此值取决于库,但保证至少为 32767任何标准库实现。
答案 1 :(得分:1)
rand
生成[0 .. RAND_MAX
]范围内的随机数,在某些C库(特别是来自MSVC的库)中,RAND_MAX
小到32767.它是在MSVC上也是一个非常弱的RNG,因此您可能希望查看更好的随机数库,例如randomkit,或者您的图书馆提供的任何非标准功能。
答案 2 :(得分:1)
其他人已经指出RAND_MAX
在你的实现中是32767。但是你如何获得更高的随机数呢?
如果你想获得超过RAND_MAX
的随机数,你必须在你的例子中掷骰子两次:</ p>
x = (rand() % 1000) * 1000 + rand();
答案 3 :(得分:0)
rand()
手册说:
rand()函数返回0到
RAND_MAX
范围内的伪随机整数(即数学范围[0,RAND_MAX
])。
您的特定实现似乎使用RAND_MAX
0xFFFF(或32767)。
您需要切换库,调查您的库中是否存在任何可配置性,或使用不同的随机数实现(而不是您的C库)。
答案 4 :(得分:0)
如何显示输出?使用简单的代码,您可以实现这一点
long int x;
while(1)
{
x=random(1000000);
printf ("%ld\n",x)
}
另外,如果你的图书馆支持了吗?
答案 5 :(得分:0)
如果您遇到int类型的问题,请尝试使用double值。 drand48()返回区间[0.0,1.0]内的数字,因此您可以将其乘以1000000然后将其四舍五入以获得所需内容:
int k = floor(drand48() * 1000000);
不要忘记使用srand48()而不是srand()
进行初始化答案 6 :(得分:-1)
int k = (rand() % 1000000);
您正在以整数收集输出(当int为2个字节时),其最大容量为32767。
RAND_MAX也是rand返回的最大值32767。