【发布时间】:2012-04-10 08:38:49
【问题描述】:
所以下面的代码使得 0
r = ((double) rand() / (RAND_MAX))
为什么拥有r = ((double) rand() / (RAND_MAX + 1)) 会使 -1
不应该在 RAND_MAX 上加一使得 1
编辑:我收到警告:表达式中的整数溢出
在那条线上,所以这可能是问题所在。我刚刚做了cout << r << endl,它确实给了我介于 -1 和 0 之间的值
【问题讨论】:
-
尝试在最后一个
)之后添加1 -
请注意,无论如何你都应该使用uniform_real_distribution。如果您没有 C++11,请使用 boost version。
-
代数错误。如果
r是从零到m范围内的随机数,则比率r/m将在(0,1)范围内,但r/(m+1)将在(0, m/(m+1))范围内而不是@987654334 范围内@。如果m非常大(与1 相比),那么m/(m+1)大约为1,因此您的表达式r = ((double) rand() / (RAND_MAX + 1))将给出一个大约在(0,1) 范围内的随机数——也就是说,如果没有溢出。