So the following code makes 0 < r < 1
r = ((double) rand() / (RAND_MAX))
Why does having r = ((double) rand() / (RAND_MAX + 1)) make -1 < r < 0?
Shouldn’t adding one to RAND_MAX make 1 < r < 2?
Edit: I was getting a warning: integer overflow in expression
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
This is entirely implementation specific, but it appears that in the C++ environment you’re working in,
RAND_MAXis equal toINT_MAX.Because of this,
RAND_MAX + 1exhibits undefined (overflow) behavior, and becomesINT_MIN. While your initial statement was dividing (random # between 0 andINT_MAX)/(INT_MAX) and generating a value0 <= r < 1, now it’s dividing (random # between 0 andINT_MAX)/(INT_MIN), generating a value-1 < r <= 0In order to generate a random number
1 <= r < 2, you would want