rand()/ RAND_MAX是否返回[0,1]或[0,1]?

时间:2018-06-12 07:22:18

标签: c random

我看了很多地方,似乎找不到答案。我了解rand() / RAND_MAX == 1的概率很低,因为rand()不太可能等于RAND_MAX。 但理论上是否可行?
我看到有人写了类似的东西,范围是[0, 1),但是我不明白为什么。

谢谢!

2 个答案:

答案 0 :(得分:4)

由于整数除法的影响,奇怪的rand() / RAND_MAX只会 抽取0或1。

您的意思是1.0 * rand() / RAND_MAX吗? 可以绘制0和1;原因是允许rand()返回RAND_MAX

这是一种不寻常的做事方式。通常你不想画1,所以你经常会看到

rand() / (RAND_MAX + 1.0)

代替。请注意,1.0强制分母采用浮点类型,因此分子也将被提升。就其本身而言,RAND_MAX + 1可能会溢出一个整数类型,这可能会产生不确定的结果。

答案 1 :(得分:3)

从这里引用:
http://en.cppreference.com/w/c/numeric/random/rand

  

返回介于0和RAND_MAX之间的伪随机整数值(包括0和RAND_MAX)。

引自标准:
http://port70.net/~nsz/c/c11/n1570.html#7.22
(我大胆)

  

RAND_MAX   它扩展为整数常量表达式,即rand函数返回的最大值

这些引号显示RAND_MAX 可以返回,但正如您所说,非常不可能。

对于rand() / RAND_MAX,这意味着1实际上是一个可能的结果,但由于整数除法,0是唯一的其他可能结果。

但是,如果以浮点计算,为了获得介于两者之间的值,请注意此处描述的问题:
Is floating point math broken?