该手册Writing R Extensions,Sec。 6.7.3,指出声明为double R_pow (double x, double y)
将R API函数计算x^y
:R的R_pow()和libc的pow()之间有什么区别?
[...]使用R_FINITE检查和用于箱子返回正确的结果(同R),其中
x
,y
或我是0或失踪或无限或NaN。
但是,我找不到这样x
和y
为从C库中的函数pow()
给不当结果。我尝试过不同的情况,如x
,y being
Inf ,
NA /
NaN , integers, and so on, but I found no input data that generated the results different than those returned by ordinary
pow()`。
Rcpp::evalCpp("::pow(1.124e-15, 2)", includes = "#include <cmath>") == Rcpp::evalCpp("R_pow(1.124e-15, 2)")
## [1] TRUE
也许你们会为我提供一些不当例子。
顺便说一句,我使用gcc 4.8.2与glibc 2.18(Fedora 20,x86_64)。 For R_pow()
的源代码搜索R_pow
here。
在所有平台上,pow()是否给出了相同的特殊情况处理? –
@DavidHeffernan:我不这么认为。这里是[glibc]的源代码(https://sourceware.org/git/?p=glibc.git;a=tree;f=math)。基本上,它是'exp(x * log(y))'或'__ieee754_powf'或者其中的任何一个+一些检查,如[https://sourceware.org/git/?p=glibc.git;a =斑点; F =数学/ w_powf.c; H = fa9e0071c82939f8e3db87251328ab00f840a672; HB = HEAD)。 – gagolews
'man 3 pow'也给出了所有潜在奇点条件的详尽解释。很难找到一套不受保护的'x'或'y'。 –