diff --git a/R-package/src/xgboost_R.cpp b/R-package/src/xgboost_R.cpp index 39e6a1b66..a199c42d9 100644 --- a/R-package/src/xgboost_R.cpp +++ b/R-package/src/xgboost_R.cpp @@ -28,6 +28,11 @@ extern "C" { void (*Check)(int exp, const char *fmt, ...) = XGBoostCheck_R; void (*Error)(const char *fmt, ...) = error; } +namespace wrapper { +bool CheckNAN(float v) { + return ISNAN(v); +} +} } // namespace utils namespace random { diff --git a/wrapper/xgboost_wrapper.cpp b/wrapper/xgboost_wrapper.cpp index 659ee05ed..67c6c41d5 100644 --- a/wrapper/xgboost_wrapper.cpp +++ b/wrapper/xgboost_wrapper.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include // include all std functions using namespace std; @@ -96,19 +97,19 @@ class Booster: public learner::BoostLearner { private: bool init_model; }; +#if !defined(XGBOOST_STRICT_CXX98_) +inline bool CheckNAN(float v) { + return isnan(v); +} +#else +// redirect to defs in R +bool CheckNAN(float v); +#endif } // namespace wrapper } // namespace xgboost using namespace xgboost::wrapper; -inline bool checknan(float v) { -#if defined(__SUN__) || defined(__sum__) || defined(__SunOS) - return !(v==v); -#else - return isnan(v); -#endif -} - extern "C"{ void* XGDMatrixCreateFromFile(const char *fname, int silent) { return LoadDataMatrix(fname, silent != 0, false); @@ -162,7 +163,7 @@ extern "C"{ bst_ulong nrow, bst_ulong ncol, float missing) { - bool nan_missing = checknan(missing); + bool nan_missing = CheckNAN(missing); DMatrixSimple *p_mat = new DMatrixSimple(); DMatrixSimple &mat = *p_mat; mat.info.info.num_row = nrow; @@ -170,7 +171,7 @@ extern "C"{ for (bst_ulong i = 0; i < nrow; ++i, data += ncol) { bst_ulong nelem = 0; for (bst_ulong j = 0; j < ncol; ++j) { - if (checknan(data[j])) { + if (CheckNAN(data[j])) { utils::Check(nan_missing, "There are NAN in the matrix, however, you did not set missing=NAN"); } else {