該手冊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'。 –