My output is 20 random 1's, not between 10 and 1, can anyone explain why this is happening?
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { srand((unsigned)time(0)); int random_integer; int lowest=1, highest=10; int range=(highest-lowest)+1; for(int index=0; index<20; index++){ random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0)); cout << random_integer << endl; } }
output: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
C library function - rand()The C library function int rand(void) returns a pseudo-random number in the range of 0 to RAND_MAX. RAND_MAX is a constant whose default value may vary between implementations but it is granted to be at least 32767.
rand() The function rand() is used to generate the pseudo random number. It returns an integer value and its range is from 0 to rand_max i.e 32767.
Because, on your platform, RAND_MAX == INT_MAX
.
The expression range*rand()
can never take on a value greater than INT_MAX
. If the mathematical expression is greater than INT_MAX
, then integer overflow reduces it to a number between INT_MIN
and INT_MAX
. Dividing that by RAND_MAX
will always yield zero.
Try this expression:
random_integer = lowest+int(range*(rand()/(RAND_MAX + 1.0)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With