[Rcpp-devel] Rcpp ISNAN slower than C ISNAN?

Christian Gunning xian at unm.edu
Thu Dec 15 04:47:55 CET 2016


On Wed, Dec 14, 2016 at 12:23 PM, Johannes Kruisselbrink
<johannes at kruisselbrink.eu> wrote:
>
> Good point. Actually, I didn't even realize there were so many is-nan
> functions to choose from. But indeed, we used the R-core ISNAN function on
> doubles accessed via Rcpp.

Me either :)
Of course, the above isn't particular to Rcpp, but I found that
tracking down the underlying machinery of ISNAN in the context of Rcpp
to be an interesting and useful exercise.

>> Based on the above, I added permutations to a *very* minimal test (no
>> return val, etc) that include Romain's suggestion:
>> https://github.com/helmingstay/rcpp-timings/tree/master/minimal
>> ## source('benchmarks.r')
>>
[...]
>
> Wow, thank you for the thorough comparison. I ran some tests myself based on
> your code. It seems that I cannot get the "CountNans_expr" version to
> compile, any ideas?  Same problem with the Rcpp sugar isnan version.

Can you be more specific?

> The std::isnan version, however, does work and, on my machine, actually
> outperforms the call function. So performance-wise this is a very
> interesting candidate.

Just to clarify, R's NA is subset of ieee NaN.  So std::isnan catches
both NAs and NaNs.  If you need to manually catch *just* NAs, then it
looks like you need to return to an R-core solution (please do correct
me if I muxed this up).
Ref: https://github.com/wch/r-source/blob/trunk/src/main/arithmetic.c#L108

best,
Christian

-- 
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!


More information about the Rcpp-devel mailing list