Случайное двойное число с плавающей запятой в инклюзивном диапазоне

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

[Изменить]Обратите внимание, что у меня нет потребностив этом, и я полностью осознаю, что различие педантично. Просто любопытство и надежда на интересные ответы. Не стесняйтесь голосовать, чтобы закрыть, если этот вопрос неуместен.

26
задан MD XF 19 December 2016 в 08:57
поделиться