Можно ли вместо floor использовать round?
В Получение случайного целого числа между двумя значениями включительно?
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min); // The maximum is inclusive and the minimum is inclusive
}
Ответы (2 шт):
Вот вам документация по классу Math; Вот вам документация по методу Round. Round - Округляет значение до ближайшего целого или указанного количества десятичных знаков; Вот вам документация по методу Ceil. Ceil - Возвращает наименьшее целое число, которое больше или равно указанному числу; Вот вам документация по методу Floor. Floor - Возвращает наибольшее целое число, которое меньше или равно указанному числу;
Можно ли вместо floor использовать round? Судя по вашему вопросу, вам можно использовать обычный Round. Или вообще любой из этих методов, т.к. ни один из них не сможет пересечь ни одну из границ рандома.
UPD: поменял ссылки, не посмотрел, что этот вопрос по JS
В вашей конкретной задаче метод round даст распределение вероятности на краях в 2 раза меньше чем в середине.
То есть при такой getRandomIntInclusive(1,6) - 1 и 6 будут выпадать в 2 раза реже чем 2,3,4,5
Метод floor дает в минимуме такую же вероятность что и в середине, но нулевую вероятность в максимуме (которая легко исправляется через +1).
Дальше офтопик
Согласен с @wololo по поводу того что метод исправления инклюзивности максимума может давать сбой, хоть и с малой вероятностью
Один из способов использовать вместо +1 очень близкое к 1 число.
+ 1 - Number.EPSILON
А лучше
Math.floor(Math.random() * (max - min + 1) * (1 - Number.EPSILON) ) + min
Хотя проще
if ( rand_val > max ) return max;
return rand_val