diff extra/NaN/src/sumskipnan_mex.cpp @ 12685:f26b1170ea90 octave-forge

resulting values should be really converted to output data type
author schloegl
date Sat, 12 Sep 2015 07:15:01 +0000
parents de98e4cb9248
children 6d6285a2a633
line wrap: on
line diff
--- a/extra/NaN/src/sumskipnan_mex.cpp	Sat Sep 12 06:34:22 2015 +0000
+++ b/extra/NaN/src/sumskipnan_mex.cpp	Sat Sep 12 07:15:01 2015 +0000
@@ -327,7 +327,7 @@
 
                         /* copy to output */
                		for (j=0; j<D1; j++) {
-				LOutputSum[ix0+j] = LongOutputSum[ix0+j]; 
+				LOutputSum[ix0+j] = (typeof(*LOutputSum))LongOutputSum[ix0+j]; 
 			}
                	}		
 	}
@@ -371,8 +371,8 @@
 
                                 /* copy to output */
 	               	for (j=0; j<D1; j++) {
-				LOutputSum[ix0+j]   = LongOutputSum[ix0+j]; 
-				LOutputCount[ix0+j] = LongOutputCount[ix0+j]; 
+				LOutputSum[ix0+j]   = (typeof(*LOutputSum))LongOutputSum[ix0+j]; 
+				LOutputCount[ix0+j] = (typeof(*LOutputCount))LongOutputCount[ix0+j]; 
 	       		}	// 	end else 
                	}		
 	}
@@ -390,7 +390,7 @@
 					long double x = *LInput;
         				if (!isnan(x)) {
 						LongOutputCount[ix2] += W[j]; 
-						double t = W[j]*x;
+						long double t = W[j]*x;
 						LongOutputSum[ix2]   += t; 
 						LongOutputSum2[ix2]  += x*t; 
 					}
@@ -419,9 +419,9 @@
 
                        /* copy to output */
 	        	for (j=0; j<D1; j++) {
-				LOutputSum[ix0+j]   = LongOutputSum[ix0+j]; 
-				LOutputCount[ix0+j] = LongOutputCount[ix0+j]; 
-				LOutputSum2[ix0+j]  = LongOutputSum2[ix0+j]; 
+				LOutputSum[ix0+j]   = (typeof(*LOutputSum))LongOutputSum[ix0+j]; 
+				LOutputCount[ix0+j] = (typeof(*LOutputCount))LongOutputCount[ix0+j]; 
+				LOutputSum2[ix0+j]  = (typeof(*LOutputSum2))LongOutputSum2[ix0+j]; 
 			}
                	}		
 	}
@@ -500,7 +500,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {
 		// w/o weight vector 
 		size_t countI = 0;
@@ -518,13 +518,13 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}	
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
+	*s  = (typeof(*s))sum;
 
 }
 
@@ -556,7 +556,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {	
 		// w/o weight vector 
 		size_t countI = 0;
@@ -574,14 +574,14 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
-	*s2 = msq; 
+	*s  = (typeof(*s))sum;
+	*s2 = (typeof(*s2))msq; 
 }
 
 inline void __sumskipnan2wr__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W)
@@ -610,7 +610,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {
 		// w/o weight vector 
 		size_t countI = 0;
@@ -628,13 +628,13 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}	
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
+	*s  = (typeof(*s))sum;
 
 }
 
@@ -684,14 +684,14 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
-	*s2 = msq; 
+	*s  = (typeof(*s))sum;
+	*s2 = (typeof(*s2))msq; 
 }
 
 
@@ -743,7 +743,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {
 		// w/o weight vector 
 		size_t countI = 0;
@@ -767,13 +767,13 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}	
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
+	*s  = (typeof(*s))sum;
 
 }
 
@@ -821,7 +821,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {	
 		// w/o weight vector 
 		size_t countI = 0;
@@ -850,14 +850,14 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
-	*s2 = msq; 
+	*s  = (typeof(*s))sum;
+	*s2 = (typeof(*s))msq; 
 }
 
 inline void __sumskipnan2wer__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W)
@@ -897,7 +897,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {
 		// w/o weight vector 
 		size_t countI = 0;
@@ -921,13 +921,13 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}	
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
+	*s  = (typeof(*s))sum;
 
 }
 
@@ -975,7 +975,7 @@
 			W++;
 		}
 		while (data < end);
-	        *No = count;
+	        *No = (typeof(*No))count;
 	} else {	
 		// w/o weight vector 
 		size_t countI = 0;
@@ -1004,13 +1004,13 @@
 			data++;	// stride=1
 		}
 		while (data < end);
-	        *No = (double)countI;
+	        *No = (typeof(*No))countI;
 	}
 	
 #ifndef NO_FLAG
 	if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 
 #endif
-	*s  = sum;
-	*s2 = msq; 
+	*s  = (typeof(*s))sum;
+	*s2 = (typeof(*s))msq; 
 }