Скажем, у меня есть два числа с плавающей запятой, и я хочу их сравнить. Если один больше другого, программа должна взять одну вилку. Если противоположное верно, оно должно пройти другим путем. И он должен делать то же самое, если сравниваемое значение слегка подтолкнет в направлении, которое все равно должно заставить его сравнить true.
Это сложный вопрос для фразы, поэтому я написал это, чтобы продемонстрировать это -
float a = random();
float b = random(); // always returns a number (no infinity or NaNs)
if(a < b){
if( !(a < b + FLOAT_EPISILON) ) launchTheMissiles();
buildHospitals();
}else if(a >= b){
if( !(a >= b - FLOAT_EPISILON) ) launchTheMissiles();
buildOrphanages();
}else{
launchTheMissiles(); // This should never be called, in any branch
}
С учетом этого кода гарантируется, что launchTheMissiles()
никогда не будет вызываться?