问题描述
因此,以下代码将0设为
So the following code makes 0 < r < 1
r = ((double) rand() / (RAND_MAX))
为什么让r = ((double) rand() / (RAND_MAX + 1))
使-1< & 0?
Why does having r = ((double) rand() / (RAND_MAX + 1))
make -1 < r < 0?
不得将RAND_MAX中的1加1. & 2?
Shouldn't adding one to RAND_MAX make 1 < r < 2?
我收到警告:表达式中的整数溢出
I was getting a warning: integer overflow in expression
在那一行上,所以可能是问题所在.我只是做了cout << r << endl
,它肯定给了我-1和0之间的值
on that line, so that might be the problem. I just did cout << r << endl
and it definitely gives me values between -1 and 0
推荐答案
这完全是实现特定的,但是看来在您使用的C ++环境中,RAND_MAX
等于INT_MAX
.
This is entirely implementation specific, but it appears that in the C++ environment you're working in, RAND_MAX
is equal to INT_MAX
.
因此,RAND_MAX + 1
表现出不确定的(溢出)行为,并变为INT_MIN
.当您的初始语句是除法(0和INT_MAX
之间的随机数)/(INT_MAX
)并生成值0 <= r < 1
时,现在它是除法(0和INT_MAX
之间的随机数)/(INT_MIN
),生成值-1 < r <= 0
Because of this, RAND_MAX + 1
exhibits undefined (overflow) behavior, and becomes INT_MIN
. While your initial statement was dividing (random # between 0 and INT_MAX
)/(INT_MAX
) and generating a value 0 <= r < 1
, now it's dividing (random # between 0 and INT_MAX
)/(INT_MIN
), generating a value -1 < r <= 0
要生成随机数1 <= r < 2
,您需要
r = ((double) rand() / (RAND_MAX)) + 1
这篇关于介于0和1之间的rand()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!