Hi, Devin, You may misunderstand NaN. NaN is a special floating number. It doesn't equal to anything, even itself. If x is NaN, x == x will return false. Actually this is a trick to detect whether it is NaN or not.
However, there is a standard way to handle it, using isnan [1]. Try the code below: // [[Rcpp::depends(RcppGSL)]] #include <RcppGSL.h> #include <gsl/gsl_sf_hyperg.h> #include <Rcpp.h> #include <math.h> using namespace Rcpp; // [[Rcpp::export]] SEXP test() { gsl_set_error_handler_off(); double res = gsl_sf_hyperg_2F1(1,1,1.1467003,1); if (res != res){ Rcout << "NaN found!" << std::endl; } if (isnan(res)){ Rcout << "NaN found using isnan!" << std::endl; } return R_NilValue; } R result: > sourceCpp("testgsl.cpp") > test() NaN found! NaN found using isnan! NULL > If you are dealing with something more than a NaN floating number, Dirk's solution is your best choice. Best, KK [1] http://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html#Floating-Point-Classes On Fri, Dec 12, 2014 at 8:05 AM, Dirk Eddelbuettel <e...@debian.org> wrote: > > > On 12 December 2014 at 10:09, Devin wrote: > | ... but you can't set a mathematical operation equal to a string. I also > tried: > | > | int test() > | { > | gsl_set_error_handler_off(); > | if(gsl_sf_hyperg_2F1(1,1,1.1467003,1) == NAN){ > | std::cout << "Error" << std::endl; > | } > | return 0; > | } > | > | ... but the if-branch gets ignored. How can I achieve that the program > runs through the if-branch? > > Use a proper test for NaN. > > See eg http://gallery.rcpp.org/articles/working-with-missing-values/ or > other > documentation as eg the Writing R Extensions manual, my Rcpp book -- or the > content of the Rcpp package. > > A simple way, using a macro from the R headers, is > > R> cppFunction('bool isItNan(double foo) { return ISNAN(foo); }') > R> isItNan(NaN) > [1] TRUE > R> isItNan(3.14) > [1] FALSE > R> isItNan(3L) > [1] FALSE > R> > > There are (better) alternatives in the Rcpp sources, but some of the > behaviour is subtle. Kevin once wrote a great answer at StackOverflow: > > > http://stackoverflow.com/questions/26241085/rcpp-function-check-if-missing-value/26262984#26262984 > > > Dirk > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org > -- Qiang Kou q...@umail.iu.edu School of Informatics and Computing, Indiana University
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel