rand() between 0 and 1

2019-01-16 12:23发布

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

标签: c++ random
7条回答
Deceive 欺骗
2楼-- · 2019-01-16 12:54

My guess is that RAND_MAX is equal to INT_MAX and so you're overflowing it to a negative.

Just do this:

r = ((double) rand() / (RAND_MAX)) + 1;

Or even better, use C++11's random number generators.

查看更多
登录 后发表回答