Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ generating random numbers

Tags:

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

like image 491
visanio_learner Avatar asked Feb 28 '12 15:02

visanio_learner


People also ask

Does C have a random number generator?

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.

What does RAND () do in C?

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.


1 Answers

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))) 
like image 161
Robᵩ Avatar answered Sep 19 '22 12:09

Robᵩ