Как получить рандомное число из сложного промежутка?
Есть промежуток такого вида: От -1.5f до -0.5f и от 0.5f до 1.5f. Нужно получить рандомное число из такого диапазона, проще говоря нужно число от -1.5f до 1.5f, но выключив такой промежуток : от -0.5f до 0.5f
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
Почему бы не так:
double result;
double raw = random.NextDouble();
if (raw < 0.5) // raw in [0, 0.5)
result = raw * 2 - 1.5; // raw * 2 in [0, 1), result in [-1.5, -0,5)
else // raw in [0.5, 1)
result = raw * 2 - 0.5; // raw * 2 in [1, 2), result in [0.5, 1.5)
Если вам нужно, к примеру, (0.5, 1.5] вместо [0.5, 1.5), можно «перевернуть» результат:
result = 2.5 - raw * 2; // -raw * 2 in (-2, -1], result in (0.5, 1.5]
Если вам нужен именно float, можно объявить result как float и скастить при присвоении.
В переменной random должен быть экземпляр класса Random. Для .NET Framework имеет смысл завести глобальный экземпляр (тут объяснение, почему), а для .NET Core и .NET 5+ можно создать прямо в начале метода:
var random = new Random();