# HG changeset patch # User schloegl # Date 1427748728 0 # Node ID be7bdefa4a1f0d0264c4240e1c5a8b8855345e1a # Parent 5d4cdc6e7bec4638a2227ac71157ae55588b0ef6 [NaN] histo_mex: more efficient checks on isnan - requires less comparison operations diff -r 5d4cdc6e7bec -r be7bdefa4a1f extra/NaN/src/histo_mex.cpp --- a/extra/NaN/src/histo_mex.cpp Mon Mar 30 20:48:51 2015 +0000 +++ b/extra/NaN/src/histo_mex.cpp Mon Mar 30 20:52:08 2015 +0000 @@ -109,30 +109,24 @@ float f1,f2; f1 = ((float*)Sort.Table)[ix1]; f2 = ((float*)Sort.Table)[ix2]; - switch (__isnanf(f1) + 2*__isnanf(f2)) { - case 0: - if (f1f2) z = 1; - case 3: - break; - case 1: z = 1; break; - case 2: z = -1; break; - } + z = __isnanf(f1) - __isnanf(f2); + if (z) break; + + if (f1f2) z = 1; + // else f1==f2 || (isnan(f1) && isnan(f2)) break; } case mxDOUBLE_CLASS: { double f1,f2; f1 = ((double*)Sort.Table)[ix1]; f2 = ((double*)Sort.Table)[ix2]; - switch (__isnan(f1) + 2*__isnan(f2)) { - case 0: - if (f1f2) z = 1; - case 3: - break; - case 1: z = 1; break; - case 2: z = -1; break; - } + z = __isnan(f1) - __isnan(f2); + if (z) break; + + if (f1f2) z = 1; + // else f1==f2 || (isnan(f1) && isnan(f2)) break; } case mxINT16_CLASS: {