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