David Gomes
David Gomes

Reputation: 5825

Random double between min and max

double get_random(double min, double max) {
  /* Returns a random double between min and max */

  return min * ((double) rand() / (double) RAND_MAX) - max;
}

That's my function to generate random doubles between a min and a max. However, when I call get_random(-1.0, 1.0);, I get values between -2.0 and -1.0.

Any idea of what I'm doing wrong and how I can fix it?

Upvotes: 7

Views: 33608

Answers (2)

user2514807
user2514807

Reputation: 11

You can use this for generating random double or floating numbers:

((double) rand()*(max-min)/(double)RAND_MAX-min);

Upvotes: 1

Luchian Grigore
Luchian Grigore

Reputation: 258618

Shouldn't the formula be

(max - min) * ( (double)rand() / (double)RAND_MAX ) + min
  • (double)rand() / (double)RAND_MAX returns a random number between 0 and 1
  • (max - min) * ( (double)rand() / (double)RAND_MAX ) returns a random number between 0 and max - min.
  • the whole expression will return a random number between 0 + min and min + (max-min) - i.e. min and max.

Upvotes: 22

Related Questions