所以下面的代码使得 0 < r < 1
r = ((double) rand() / (RAND_MAX))
为什么会有r = ((double) rand() / (RAND_MAX + 1))
使 -1 < r < 0?
不应该在 RAND_MAX 上加一使得 1 < r < 2?
编辑:我收到警告:表达式中的整数溢出
在那条线上,所以这可能是问题所在。我刚刚做了cout << r << endl
它肯定给了我介于 -1 和 0 之间的值
最佳答案
这完全是特定于实现的,但似乎在您正在使用的 C++ 环境中,RAND_MAX
等于 INT_MAX
.
因此,RAND_MAX + 1
表现出未定义(溢出)行为,并变为 INT_MIN
.虽然您的初始语句正在划分(0 和 INT_MAX
之间的随机 #)/(INT_MAX
)并生成一个值 0 <= r < 1
,现在它正在划分(0和INT_MAX
之间的随机#)/(INT_MIN
),生成一个值-1 < r <= 0
为了生成随机数1 <= r < 2
,你会想要的
r = ((double) rand() / (RAND_MAX)) + 1
关于c++ - rand() 介于 0 和 1 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878965/