因此,以下代码使得 0 < r < 1。
r = ((double) rand() / (RAND_MAX))
为什么使用r = ((double) rand() / (RAND_MAX + 1))
会使得结果在-1和0之间?添加一到RAND_MAX难道不应该让结果在1和2之间吗?
编辑:我在这行代码上得到了一个"integer overflow in expression"的警告,所以可能是这个问题。我刚刚用
cout << r << endl
测试了一下,它确实给我返回了在-1和0之间的值。
)
后添加1
。 - Vincenzo Piir
是从0到m
范围内的随机数,则比率r/m
将在范围(0,1)内,但是r/(m+1)
将在范围(0,m/(m+1))内,而不是范围(1,2)内。如果m
非常大(与1相比),则m/(m+1)
近似于1,因此您的表达式r = ((double) rand() / (RAND_MAX + 1))
将给出一个随机数,其范围大约为(0,1)-也就是说,如果没有溢出的话。 - flies