Запишите действительно содержащий случайный метод для JavaScript

МАТЕМАТИЧЕСКИЙ объект JavaScript имеет случайный метод, который возвращается из набора [0,1), 0 содержащих, 1 эксклюзивное. Есть ли способ возвратить действительно случайный метод, который включает 1.

например.

var rand = MATH.random()*2;

if(rand > 1)
{
   rand = MATH.floor(rand);
}

return rand; 

В то время как это всегда возвращает число из набора [0,1], это не действительно случайно.

15
задан Will Vousden 27 January 2010 в 00:33
поделиться

4 ответа

Включает ли это границы, не должно иметь значения; на самом деле, строго говоря, то, что вы пытаетесь сделать, на самом деле не имеет смысла. Помните, что при непрерывном распределении вероятностей вероятность получения определенного значения все равно бесконечно мала, поэтому математически говоря, вы никогда не увидите точного значения 1.

Конечно, в компьютерном мире распределение RNG не является по-настоящему непрерывным, поэтому "возможно", что вы столкнетесь с определенным значением (что бы это ни значило), но тот факт, что вы полагаетесь на ограничение того, как хранятся вещественные числа, намекает на проблемы с вашим подходом к решению любой проблемы, которую вы пытаетесь решить.

8
ответ дан 1 December 2019 в 01:30
поделиться
121 --- 1701435-

Это вернет [0,1] включительно:

if(MATH.random() == 0)
    return 1;
else
    return MATH.random();

Объяснение: Если первый вызов случайной () возвращается 0, Возвращение 1. В противном случае вызовите случайные, которые будут [0,1). Следовательно, он вернется [0,1] все включено.

14
ответ дан 1 December 2019 в 01:30
поделиться

Функция Math.random возвращает случайное число от 0 до 1, где 0 включено и 1 является исключительным. Это означает, что единственный способ правильного распространения случайных чисел в виде целых чисел в интервале - это использовать эксклюзивный верхний предел.

Чтобы указать включенный верхний предел, вы просто добавляете его к нему, чтобы сделать его исключительным в расчете. Это будет распространять случайные числа правильно от 7 до 12, включительно:

var min = 7;
var max = 12;
var rnd = min + Math.floor(Math.random() * (max - min + 1));
7
ответ дан 1 December 2019 в 01:30
поделиться

Вы хотите, чтобы он включал 1?

return 1 - Math.random();

Однако, я думаю, что это один из тех вопросов, которые намекают на другие проблемы. Почему вы хотите, чтобы он включал 1? Вероятно, есть лучший способ сделать это.

3
ответ дан 1 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: