Случайное число с плавающей запятой в Инклюзивном диапазоне - PullRequest
25 голосов
/ 15 марта 2012

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

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

Ответы [ 11 ]

0 голосов
/ 15 марта 2012

Вопрос похож на вопрос: что такое число с плавающей запятой перед 1.0? Существует такое число с плавающей запятой, но оно одно в 2 ^ 24 (для IEEE float)или один из 2 ^ 53 (для double).

На практике разница незначительна.

...