Мы можем легко получить случайные числа с плавающей запятой в пределах желаемого диапазона [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]
?)
[Изменить]Обратите внимание, что у меня нет потребностив этом, и я полностью осознаю, что различие педантично. Просто любопытство и надежда на интересные ответы. Не стесняйтесь голосовать, чтобы закрыть, если этот вопрос неуместен.