1到3之间的随机数

时间:2014-04-17 08:05:46

标签: c random

如何生成1到3之间的随机数? 有了这个功能,我有时会得到0(我只想要1,2或3):

ziehen=rand() % 3 + 1;

为什么我必须在主程序中添加srand(0)? 我添加了

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

到Libaries。这还不够,还是我需要更多?

2 个答案:

答案 0 :(得分:2)

您必须从不使用模数来减少rand()输出的周期性。原因?这是因为标准线性同余生成器的低阶位比高阶位更不随机:模数丢弃高阶位。

最好的办法是使用(3.0 * rand() / (RAND_MAX + 1.0)) + 1.0;。通过将输出分配给整数类型,将其隐​​式转换为int

RAND_MAX由C标准定义,其值依赖于实现

答案 1 :(得分:1)

此代码永远不会返回0. rand()始终返回介于0和RAND_MAX之间的数字。

模运算返回0到2之间的值。添加1会产生您想要的结果。 无需括号。 Modulo排名高于增加。

您不必添加srand(0),但如果这样做,您将始终获得相同的数字序列。阅读文档。