Stephen Milborrow wrote:> In R, 0 ^ NaN yields Inf. I would have expected NaN or perhaps 0. Is this
> behaviour intended?
>
Well, it certainly follows from the implementation. In the R_pow C routine,
double R_pow(double x, double y) /* = x ^ y */
{
if(x == 1. || y == 0.)
return(1.);
if(x == 0.) {
if(y > 0.) return(0.);
/* y < 0 */ return(R_PosInf);
}
It does seem, however, that NaN is the logical result here, which I
think results from changing the implementation to:
if(x == 0.) {
if(y > 0.) return(0.);
else if(y < 0) return(R_PosInf);
else return(y); /* NA or NaN, we assert */
}
Other things being equal, `^` should follow the C pow() function for
numeric arguments. After writing pow() as an R function that calls this
C function:
> pow(0,NaN)
[1] NaN
> pow(0,NA)
[1] NA
> pow(0,0)
[1] 1
The second example presumably falls out because the C function returns
its second argument if that is a NaN (which a numeric NA is, in C but
not in R). The modified code in R_pow mimics that behavior.
Along the line, notice that both R_pow and pow give 0^0 as 1. (Just at
a guess, C might give 0^-0 as Inf, but I don't know how to test that in R.)
Other opinions?
John
>
>> sessionInfo()
>>
> R version 2.8.0 (2008-10-20)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> Steve Milborrow
> www.milbo.users.sonic.net
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
[[alternative HTML version deleted]]