Делаю игральные «кубики» по примеру в учебнике, появился вопрос —
Вот как в учебнике:
var die = Math.floor(Math.random()*6 + 1);
Таким образом автор утверждает, что мой результат всегда будет равен от 1 до 6, включительно.
Но, если Math.random( ) дает мне числа от 0 до 1, после чего мы это число умножаем на 6 и прибавляем 1, затем округляя до ближайшего целого — разве не существует небольшой вероятности получения числа 7?
Math.random() выдает числа от 0 до 1, не включая 1, т.е. числа в диапазоне [0, 1), соответственно диапазон Math.floor(Math.random()*6 + 1) = [1, 7)
Поэтому после откидывания дробной части получится число от 1 до 6.
Вот только вчера искал про перевод Float в Int в Java, как раз в одном из ответов на StackOverflow видна разница между floor/truncate/round stackoverflow.com/questions/1295424/how-to-convert-float-to-int-with-java, и в дополнение к этому описание random'a: random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
то есть 0.0 <= random() < 1.0