Рандомное число в диапазоне с равным шансом выпадения?
какова честная формула вычисления рандомного числа? т.е. допустим диапазон от 0 и до n (n может быть любое число ну например 87)
мне нужна формула которая будет давай равный шанс выпадения любому числу...
например
Math.round(Math.random() * users.length) не подходит т.к. округляет, и допустим у числа 0 и 87 уже в 2 раза меньше шансов чем у остальных
Math.floor(Math.random() * users.length) тоже не подходит т.е. выпадают числа у которых шанс тоже в 2 раза больше...
самое простое решение которое вижу это использовать floor и добавлять к user.lenght+ 0.99
есть еще варианты ???
Fedor Vlasenko, битовые операции в JS - совсем не такое тащерство по скорости, как в тех же плюсах. Число сначала приводится к Int32.
Потому в данном конкретном кейсе это плохая идея. Сравни 3000000000.1 | 0 и Math.floor(3000000000.1) в консоли браузера.
Alexandroppolus, нет их надо использовать зная тонкости
приведения типов , битовых, длины массива и т. д.
это удобно меньше буковок писать
По логике users за выход этого числа уж слишком круто :-)
Fedor Vlasenko, для users многовато, согласен. Автор вопроса не фейсбук )
но в общем случае всякое может быть.
на ровном месте ставить код в зависимость от данных - так себе.
да и семантически эта штука хреновая. Поразрядная операция, которая ничего поразрядного не делает, зато неявно переводит вещественное в целое, причем именно в знаковый инт32. Она выглядит как мусор, который рано или поздно кто-нибудь удалит не разобравшись. Хотя можно написать коммент. Но это будет уже больше букв, чем Math.floor.