Приведение к ошибкам с целыми числами и числами с плавающей запятой?

myInt = int( 5 * myRandom() )

мойСлучайный()представляет собой случайно сгенерированное число с плавающей запятой, которое должно равняться 0,2.

Таким образом, этот оператор должен оцениваться как 1 .

Мой вопрос :возможно ли, что из-за ошибки с плавающей запятой НЕ будет оцениваться как 1 ?

Например, если из-за ошибки с плавающей запятой должно быть 0,2 , может ли это быть МЕНЬШЕ , чем это? IE, например, рассмотрите следующие 3 возможности:

int(5 * 0.2 )                = 1 //case 1 normal
int(5 * 0.2000000000000001 ) = 1 //case 2 slightly larger, its OK
int(5 * 0.1999999999999999 ) = 0 //case 3 negative, is NOT OK, as int() floors it

Возможно ли case3 ? с 0.1999999999999999 результатом ошибки с плавающей запятой? На самом деле я никогда не видел отрицательный эпсилон до сих пор, только случай 2, когда он немного больше, и это нормально, так как когда он приводится к int (), это «выравнивает» его до правильного результата. Однако с отрицательным эпсилон эффект «настила» сделает результирующее 0,99999999999999996 равным 0.

8
задан mskfisher 6 July 2012 в 02:09
поделиться