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]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel