In case of very small negative h (e.g. -1e-40), with the current implementation,
you will go through the first condition and end up with h = 6.f, and will miss
the second condition.
float p1 = 2*l - p2;
h *= hscale;
- if( h < 0 )
- do h += 6; while( h < 0 );
- else if( h >= 6 )
- do h -= 6; while( h >= 6 );
+ // We need both loops to clamp (e.g. for h == -1e-40).
+ while( h < 0 ) h += 6;
+ while( h >= 6 ) h -= 6;
- assert( 0 <= h && h < 6 );
+ CV_DbgAssert( 0 <= h && h < 6 );
sector = cvFloor(h);
h -= sector;