Mercurial > forge
diff extra/NaN/src/covm_mex.cpp @ 12691:6d6285a2a633 octave-forge
use macro ISNAN() instead of C++'s isnan() - because it supports all floating point formats not just double
author | schloegl |
---|---|
date | Sat, 12 Sep 2015 14:16:39 +0000 |
parents | f26b1170ea90 |
children | 79e7259c6ff1 |
line wrap: on
line diff
--- a/extra/NaN/src/covm_mex.cpp Sat Sep 12 13:04:40 2015 +0000 +++ b/extra/NaN/src/covm_mex.cpp Sat Sep 12 14:16:39 2015 +0000 @@ -29,7 +29,7 @@ // // Output: // - CC = X' * sparse(diag(W)) * Y while NaN's are skipped -// - NN = real(~isnan(X)')*sparse(diag(W))*real(~isnan(Y)) count of valid (non-NaN) elements +// - NN = real(~ISNAN(X)')*sparse(diag(W))*real(~ISNAN(Y)) count of valid (non-NaN) elements // computed more efficiently // // $Id$ @@ -48,6 +48,11 @@ /*#define NO_FLAG*/ +/* + math.h has isnan() defined for all sizes of floating point numbers, + but c++ assumes isnan(double), causing possible conversions for float and long double + */ +#define ISNAN(a) (a!=a) void mexFunction(int POutputCount, mxArray* POutput[], int PInputCount, const mxArray *PInputs[]) { @@ -163,7 +168,7 @@ w = W[k]; for (i=0; i<cX; i++) { double x = X0[k+i*rX]; - if (isnan(x)) { + if (ISNAN(x)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -171,7 +176,7 @@ } for (j=0; j<cY; j++) { double y = Y0[k+j*rY]; - if (isnan(y)) { + if (ISNAN(y)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -185,7 +190,7 @@ } else for (i=0; i<cX; i++) { double x = X0[k+i*rX]; - if (isnan(x)) { + if (ISNAN(x)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -193,7 +198,7 @@ } for (j=0; j<cY; j++) { double y = Y0[k+j*rY]; - if (isnan(y)) { + if (ISNAN(y)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -230,7 +235,7 @@ size_t k; for (k=0; k<rX; k++) { double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -254,7 +259,7 @@ size_t k; for (k=0; k<rX; k++) { double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -283,7 +288,7 @@ size_t k; for (k=0; k<rX; k++) { double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -314,7 +319,7 @@ size_t k; for (k=0; k<rX; k++) { double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -353,7 +358,7 @@ size_t k; for (k=0; k<rX; k++) { long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -377,7 +382,7 @@ size_t k; for (k=0; k<rX; k++) { long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -406,7 +411,7 @@ size_t k; for (k=0; k<rX; k++) { long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -437,7 +442,7 @@ size_t k; for (k=0; k<rX; k++) { long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -482,7 +487,7 @@ for (k=0; k<rX; k++) { long double t,y; long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -517,7 +522,7 @@ for (k=0; k<rX; k++) { long double t,y; long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -554,7 +559,7 @@ for (k=0; k<rX; k++) { long double t,y; long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -596,7 +601,7 @@ for (k=0; k<rX; k++) { long double t,y; long double z = ((long double)X[k])*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -645,7 +650,7 @@ for (k=0; k<rX; k++) { double t,y; double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -680,7 +685,7 @@ for (k=0; k<rX; k++) { double t,y; double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -717,7 +722,7 @@ for (k=0; k<rX; k++) { double t,y; double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif @@ -759,7 +764,7 @@ for (k=0; k<rX; k++) { double t,y; double z = X[k]*Y[k]; - if (isnan(z)) { + if (ISNAN(z)) { #ifndef NO_FLAG flag_isNaN = 1; #endif