I would like to generate a random floating point number between 2 values. What is the best way to do this in C#?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The only thing I’d add to Eric‘s response is an explanation; I feel that knowledge of why code works is better than knowing what code works.
The explanation is this: let’s say you want a number between 2.5 and 4.5. The range is 2.0 (4.5 – 2.5).
NextDoubleonly returns a number between 0 and 1.0, but if you multiply this by the range you will get a number between 0 and range.So, this would give us random doubles between 0.0 and 2.0:
But, we want them between 2.5 and 4.5! How do we do this? Add the smallest number, 2.5:
Now, we get a number between 0.0 and 2.0; if you add 2.5 to each of these values we see that the range is now between 2.5 and 4.5.
At first I thought that it mattered if b > a or a > b, but if you work it out both ways you’ll find it works out identically so long as you don’t mess up the order of the variables used. I like to express it with longer variable names so I don’t get mixed up:
double NextDouble(Random rng, double min, double max) { return min + (rng.NextDouble() * (max - min)); }