При умножении числа с плавающей запятой, которое очень близко к 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, так как коллега, сообщивший, что он видел, что он ошибается, - это то, что отчасти заставило меня задать этот вопрос.