Почему не рекомендуется использовать Math.round, когда делаешь генератор случайных чисел.
И ещё, почему пишется Math.floor(Math.random() * (max - min + 1)) + min;, ведь можно написать просто
Math.floor(Math.random() * (max + 1)); и получится тоже самое, или нет ?
function getRandomInt(min, max) {
Math.floor(Math.random() * (max - min + 1)) + min;
}
document.write('' + getRandomInt(1, 100))
JavaScript
Знатоки JavaScript'a, вам сюда
А я не рекомендую использовать метод
Math.floor() (возвращает наибольшее целое число, которое меньше или равно данному числу.)
А вместо него надо вставлять Math.round() (возвращает число, округлённое к ближайшему целому.)
Так как Math.floor() он портит саму идею случайности если не поняли почему читайте внимательно описание в скобках!
//Ну тут явная ошибка математику плохо учил автор
function getRandomInt(min, max) {
Math.floor(Math.random() * (max - min + 1)) + min;
}
//Вот направительный вариант
function getRandomInt(min, max) {
Math.floor(Math.random() * (max - min)) + min;
}
(Почему не рекомендуется использовать Math.round, когда делаешь генератор случайных чисел. ) Кто не рекомендует? Безграмотные программеры которые функцию не сумели написать правильно потому что математику не знают они что ли ???
Любой генератор случайных чисел посте является генератором псевда случайных чисел Тесть если какой небуть хакер математик жёстко возьмётся за этот вопрос то рана или поздно он сможет предсказать вероятность положительного результата Так что в казнено рулетку и однорукого бандита не стоит делать на компараторе. Хотя также можно предсказать вероятность любой отдельно взятой физической рулетки!
(Math.floor(Math.random() * (max + 1)); и получится тоже самое, или нет ?)
Нет это совсем не тоже самое вы убрали минимум допустим у вас минимум 10 а максимум 20 то по первой формуле получится что число будит выпадать от 10 до 21 А по вашей от 0 до 21 плюс Math.floor ещё он попортит всю идею А по моей будет всё Окей то есть будет число от 10 до 20 с хорошей степенью случайности.
На подлесок пример использования генератора случайных чисел
<div id="cunt" style="font-size: 40px; position: fixed; left: 100px; top: 100px; width: 40px; height: 40px;">🐁</div>
<script>
cunt.style.top=Math.round(this.innerHeight/2-20)+'px';
cunt.style.left=Math.round(this.innerWidth/2-20)+'px';
setInterval(()=>{
cunt.style.top=cunt.offsetTop+Math.round((Math.random()-0.5)*2)+'px';
cunt.style.left=cunt.offsetLeft+Math.round((Math.random()-0.5)*2)+'px';
},1);
</script>
Засеки время как долго мышка будет на экране
потом вместо Math.round вставь Math.floor и засеки снова время и главное смотри куда она будет убегать чаще всего !
И ты всё поймёшь....
⚤
⚤
⚤
Math.floor() (возвращает наибольшее целое число, которое меньше или равно данному числу.)
А вместо него надо вставлять Math.round() (возвращает число, округлённое к ближайшему целому.)
Так как Math.floor() он портит саму идею случайности если не поняли почему читайте внимательно описание в скобках!
//Ну тут явная ошибка математику плохо учил автор
function getRandomInt(min, max) {
Math.floor(Math.random() * (max - min + 1)) + min;
}
//Вот направительный вариант
function getRandomInt(min, max) {
Math.floor(Math.random() * (max - min)) + min;
}
(Почему не рекомендуется использовать Math.round, когда делаешь генератор случайных чисел. ) Кто не рекомендует? Безграмотные программеры которые функцию не сумели написать правильно потому что математику не знают они что ли ???
Любой генератор случайных чисел посте является генератором псевда случайных чисел Тесть если какой небуть хакер математик жёстко возьмётся за этот вопрос то рана или поздно он сможет предсказать вероятность положительного результата Так что в казнено рулетку и однорукого бандита не стоит делать на компараторе. Хотя также можно предсказать вероятность любой отдельно взятой физической рулетки!
(Math.floor(Math.random() * (max + 1)); и получится тоже самое, или нет ?)
Нет это совсем не тоже самое вы убрали минимум допустим у вас минимум 10 а максимум 20 то по первой формуле получится что число будит выпадать от 10 до 21 А по вашей от 0 до 21 плюс Math.floor ещё он попортит всю идею А по моей будет всё Окей то есть будет число от 10 до 20 с хорошей степенью случайности.
На подлесок пример использования генератора случайных чисел
<div id="cunt" style="font-size: 40px; position: fixed; left: 100px; top: 100px; width: 40px; height: 40px;">🐁</div>
<script>
cunt.style.top=Math.round(this.innerHeight/2-20)+'px';
cunt.style.left=Math.round(this.innerWidth/2-20)+'px';
setInterval(()=>{
cunt.style.top=cunt.offsetTop+Math.round((Math.random()-0.5)*2)+'px';
cunt.style.left=cunt.offsetLeft+Math.round((Math.random()-0.5)*2)+'px';
},1);
</script>
Засеки время как долго мышка будет на экране
потом вместо Math.round вставь Math.floor и засеки снова время и главное смотри куда она будет убегать чаще всего !
И ты всё поймёшь....
⚤
⚤
⚤
Потому, что при использовании round вероятность появления min и max будет вдвое меньше вероятности появления любого другого числа диапазона.
в первом случае генерируются числа от min до max, в твоем случае от 0 до max
Math.floor(Math.random() * (max - min + 1)) + min; охватывает целые отрицательные числа, помимо положительных, насколько мне видно.
Похожие вопросы
- Есть ли аналоги JavaScript?
- С чего начать учить JavaScript?
- Подскажите книги для изучения javascript? Хочу начать изучать веб программирование javascript подойтет для начала?
- Зачем нужен prototype в JavaScript?
- Тяжело ли выучить JavaScript?
- Как создать квадрат через JavaScript?
- Смотрел я тут учебный курс Евгения Попова по javascript. Удивил он (Попов) в паре мест...
- Имеет ли смысл изучать JavaScript если я полный ноль в веб программировании?
- Как установить JavaScript на ноутбук Asus ?
- Сложности с JavaScript
Math.round((Math.random() - 0.5) * 2) ==
Math.round(2 * Math.random() - 1) ==
Math.round(2 * Math.random()) - 1
В 25% случаев координата уменьшится: random in [0; 0.25);
Math.round(2 * Math.random()) - 1 == -1
В 25% случаев координата увеличится: random in [0.75; 1);
Math.round(2 * Math.random()) - 1 == +1
В 50% случаев координата не изменится: random in [0.25; 0.75);
Math.round(2 * Math.random()) - 1 == 0
Math.floor(3 * Math.random()) - 1