Единственное, что я бы добавил к ответу Эрика , - это объяснение; Я чувствую, что знание того, почему код работает, лучше, чем знание того, что код работает.
Объяснение таково: допустим, вы хотите число от 2,5 до 4,5. Диапазон составляет 2,0 (4,5 - 2,5). NextDouble
возвращает только число от 0 до 1,0, но если вы умножите его на диапазон, вы получите число от 0 до диапазон .
Итак, это даст нам случайные двойные числа между 0,0 и 2,0:
rng.NextDouble() * 2.0
Но мы хотим, чтобы они были между 2,5 и 4,5! как нам это сделать? Добавьте наименьшее число 2,5:
2.5 + rng.NextDouble() * 2.0
Теперь мы получаем число от 0,0 до 2,0; если вы добавите 2,5 к каждому из этих значений, мы увидим, что диапазон теперь находится между 2,5 и 4,5.
Сначала я подумал, что это имеет значение, если b> a или a> b, но если вы решите это обоими способами, вы обнаружите, что это работает одинаково, если вы не перепутаете порядок используемых переменных. , Мне нравится выражать это более длинными именами переменных, чтобы не путаться:
double NextDouble(Random rng, double min, double max)
{
return min + (rng.NextDouble() * (max - min));
}