[Lcms-user] Floating point equality comparisons
An ICC-based CMM for color management
Brought to you by:
mm2
From: Ethan H. <EH...@dr...> - 2009-10-17 05:39:34
|
Several of the conversion routines in cmspcs.c perform explicit comparisons of double values to 0. Depending on the compiler used and the optimization parameters, these comparisons can be unreliable. A floating point number may not be *exactly* 0 - or any other specific number for that matter - although that was the intent of the program and/or programmer. Suggested changes: 26a27,28 > #include <float.h> > 183c185 < if (xyz -> X == 0 && xyz -> Y == 0 && xyz -> Z == 0) --- > if (fabs(xyz -> X) <= DBL_EPSILON && fabs(xyz -> Y) <= DBL_EPSILON && fabs(xyz -> Z) <= DBL_EPSILON) 296c298 < if (L==0.0) { --- > if (fabs(L) <= DBL_EPSILON) { 480c482 < if (a == 0 && b == 0) --- > if (fabs(a) <= DBL_EPSILON && fabs(b) <= DBL_EPSILON) |