При умножении числа с плавающей запятой, которое очень близко к 1, на int> 0, его можно интерпретировать как 1.
То есть, если Math.random()
возвращает максимально возможный результат (который на 1 шаг ниже 1,0),
(int)(Math.random() * 8)
быть 8 или 7?
В качестве практического примера, может ли эта часто используемая конструкция давать ошибку индекса за пределами границ:
someArray[(int)(Math.random() * someArray.length)];
Меня особенно интересуют ответы для Java и ActionScript 3, но я полагаю, что все они используют одни и те же правила для арифметики с плавающей запятой, и ответы для любой платформы будут полезны.
Обновление : хотя я уже принял ответ, я все равно был бы признателен за подтверждение того, что это не может пойти не так в ActionScript 3, поскольку коллега, сообщивший, что он видел, что он однажды ошибся, является тем, что частично побудил меня задать этот вопрос.