Advertise with us

Generate Random numbers uniformly over entire range

Posted by  Tanuj Kumar
 1731  View(s)
Rate this:
Hi All!

I need to generate random numbers with in specified interval [max,min]

Also the random numbers should be uniformly distributed over interval, not located to particular point

Currenly I am generating as:

for(int i=0;i<6;i++)
DWORD random= rand()%(max-min+1) + min;
From my tests random numbers are generated around one point only

min= 3604607;
max= 7654607;
Random numbers generated:

Edit (added from answers below): Ok RAND_MAX is 32767. I am on C++ windows platform.. Is there any other method to generate random numbers with uniform distribution?

Thanks in advance! 

  1. Re: Generate Random numbers uniformly over entire range

    Hi Tanuj!

    Generally, the high bits show a better distribution than the low bits, so the recommended way to generate random numbers of a range for simple purposes is:

    ((double) rand() / (RAND_MAX+1)) * (max-min+1) + min
    Note: make sure RAND_MAX+1 does not overflow! (Thanks Demi)

    the division generates a random number from the interval [0, 1), "stretch" this to the required range. Only when max-min+1 gets close to RAND_MAX you need a "BigRand()" function like posted by Mark Ransom.

    This also avoids some slicing problems due to the modulo, which can worsen your numbers even more.