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