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