所以下面的代码使 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之间的值
原文由 CyberShot 发布,翻译遵循 CC BY-SA 4.0 许可协议
这完全是 特定于实现 的,但似乎在您正在使用的 C++ 环境中,
RAND_MAX
等于INT_MAX
。因此,
RAND_MAX + 1
表现出未定义(溢出)行为,并变为INT_MIN
。虽然您的初始语句正在划分(0 和INT_MAX
之间的随机 #)/(INT_MAX
)并生成一个值0 <= r < 1
,(现在和INT_MAX
)/(INT_MIN
),生成一个值-1 < r <= 0
为了生成一个随机数
1 <= r < 2
,你会想要