c++ - Floating Point, how much can I trust less than / greater than comparisons? -


let's have 2 floating point numbers, , want compare them. if 1 greater other, program should take 1 fork. if opposite true, should take path. , should same thing, if value being compared nudged in direction should still make compare true.

it's difficult question phrase, wrote demonstrate -

float = random(); float b = random();  // returns 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();  // should never called, in branch } 

given code, launchthemissiles() guaranteed never called?

if can guarantee a , b not nans or infinities, can do:

if (a<b) {     … } else {     … } 

the set of floating point values except infinities , nans comprise total ordering (with glitch 2 representations of zero, shouldn't matter you), not unlike working normal set of integers — difference magnitude of intervals between subsequent values not constant, integers.

in fact, ieee 754 has been designed comparisons of non-nan non-infinity values of same sign can done same operations normal integers (again, glitch zero). so, in specific case, can think of these numbers of “better integers”.


Comments

Popular posts from this blog

c++ - llvm function pass ReplaceInstWithInst malloc -

Cross-Compiling Linux Kernel for Raspberry Pi - ${CCPREFIX}gcc -v does not work -

java.lang.NoClassDefFoundError When Creating New Android Project -