Мы можем легко получить случайные числа с плавающей запятой в желаемом диапазоне [X,Y)
(обратите внимание, что X включительно, а Y эксклюзивно) с помощью функции, перечисленной ниже, поскольку Math.random()
(и большинство генераторов псевдослучайных чисел, AFAIK) производят числа в [0,1)
function randomInRange(min, max) {
return Math.random() * (max-min) + min;
}
// Notice that we can get "min" exactly but never "max".
Как мы можем получить случайное число в желаемом диапазоне включительно в обе границы, т.е. [X,Y]
?
Полагаю, мы могли бы «увеличить» наше значение с Math.random()
(или эквивалентного), «свернув» биты IEE-754 с двойной точностью с плавающей запятой , чтобы установить максимально возможное значение равным 1,0 но это похоже на боль, чтобы получить права, особенно на языках, плохо подходящих для битовых манипуляций. Есть ли более простой способ?
(Кроме того, почему генераторы случайных чисел производят числа в [0,1)
вместо [0,1]
?)
[Редактировать] Обратите внимание, что у меня нет необходимости для этого, и я полностью осознаю, что различие педантичное. Просто быть любопытным и надеяться на интересные ответы. Не стесняйтесь голосовать, чтобы закрыть, если этот вопрос неуместен.