Как получить рандомное число из сложного промежутка?

Есть промежуток такого вида: От -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();
→ Ссылка