changeset 12574:be7bdefa4a1f octave-forge

[NaN] histo_mex: more efficient checks on isnan - requires less comparison operations
author schloegl
date Mon, 30 Mar 2015 20:52:08 +0000
parents 5d4cdc6e7bec
children 5ac3069c7ecc
files extra/NaN/src/histo_mex.cpp
diffstat 1 files changed, 12 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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 (f1<f2) z = -1; 
-					else if (f1>f2) z = 1; 
-				case 3:
-					break;
-				case 1: z = 1; break; 
-				case 2: z = -1; break; 
-				} 
+			z = __isnanf(f1) - __isnanf(f2);
+			if (z) break;
+			
+			if (f1<f2) z = -1; 
+			else if (f1>f2) 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 (f1<f2) z = -1; 
-					else if (f1>f2) z = 1; 
-				case 3:
-					break;
-				case 1: z = 1; break; 
-				case 2: z = -1; break; 
-				} 
+			z = __isnan(f1) - __isnan(f2);
+			if (z) break;
+			
+			if (f1<f2) z = -1; 
+			else if (f1>f2) z = 1; 
+			// else f1==f2 || (isnan(f1) && isnan(f2))	
 			break;
 			}
 		case mxINT16_CLASS: {