Можно ли округлить 0,99999999999 до 1,0 при умножении?

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

35
задан Bart van Heukelom 15 April 2012 в 16:36
поделиться