Reputation: 5825
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
Reputation: 11
You can use this for generating random double or floating numbers:
((double) rand()*(max-min)/(double)RAND_MAX-min);
Upvotes: 1
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
.0 + min
and min + (max-min)
- i.e. min
and max
.Upvotes: 22