#c #r #rcpp
Вопрос:
Я пишу код Rcpp
и сталкиваюсь со следующей проблемой
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
double EXP(double x){
return exp(x);
}
Я хотел бы спросить, есть ли способ заставить функцию EXP
обрабатывать большие отрицательные значения. Например, когда я бегу
EXP(-5000)
[1] 0
В идеале я хотел бы иметь что-то ненулевое, но очень близкое к нулю. Есть ли способ достичь этого?
Комментарии:
1.
EXP(-5000)
находится3.369870547951800096615642407437e-2172
за пределами диапазонаdouble
(e-308), но неlong double
(если поддерживаются 80 или 128 — битные удвоения) см. Диапазон значений en.cppreference.com/w/cpp/language/types2. Также «…Для совместимого с IEEE типа double переполнение гарантируется, если 709,8 < arg, и нижний поток гарантируется, если arg < -708,4 …» см. en.cppreference.com/w/cpp/numeric/math/exp так что просто проверьте
0
и верните небольшое количество.3. @RichardCritten Проблема, конечно, в том, что у R нет длинных двойников.
4. Общий подход к этой проблеме состоит в том, чтобы попытаться избежать возведения в степень и работать в логарифмической шкале.