Руководство по Writing R Extensions, разд. 6.7.3., утверждает, что функция R API, объявленная как double R_pow (double x, double y)
, вычисляет x^y
:
[...] используя проверки R_FINITE и возвращая правильный результат (такой же, как R) для случаев, когда
x
,y
или i равны 0 или отсутствуют, или бесконечны, или NaN.
Однако я не могу найти такие x
и y
, для которых функция pow()
из библиотеки C дает неверные результаты. Я пробовал разные случаи, например 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). Исходный код R_pow()
найдите R_pow
здесь.
exp(x*log(y))
или__ieee754_powf
или любой из них + некоторые проверки, такие как здесь. - person gagolews   schedule 03.07.2014man 3 pow
также дает исчерпывающее объяснение всех потенциальных условий сингулярности. Было бы трудно найти наборx
илиy
, который не был бы защищен от них. - person David C. Rankin   schedule 03.07.2014