首页 > 解决方案 > Rcpp:使用双精度类型的浮点异常

问题描述

我尝试在 cpp 中编写一个可以在 rcpp 中使用的简单函数,例如:

#include <Rcpp.h> 
using namespace Rcpp;

// [[Rcpp::export]]
inline static double calc(double a, double b, double c){ 
    return a - b + c;
}

// [[Rcpp::export]]
void other_function() {
    double res = calc(1.00, 0.00, 3.00);        // no error

    NumericVector resV;
    resV[0] = calc(1.00, 0.00, 3.00);   // Floating point exception

    Rcout << res;                       // Floating point exception
}

但是每次如果我尝试访问函数 calc() 的结果,我都会得到一个 浮点异常

如果我只获取 R 文件并从控制台调用函数 res() 一切似乎都很好:

source("myscript.R")
calc(1.00,0.00,3.00)
>> 4.00

我已经尝试过的:

更新:

每次我尝试在其他函数中调用other_function()时,都会收到以下消息:

Floating point exception

例如:

void another_function() {
    other_function();       // produce Floating point exception
}

如果我直接在 R 中调用 other_function() 一切都很好!

这段代码(感谢snake_style)也对我不起作用:

NumericVector resV = NumericVector::create(progressionC(1.00, 0.00, 3.00));

解决了

通过简单地重新安装 Rcpp 包解决了这个问题。我不知道为什么我得到这个错误......无论如何,现在它可以工作了。

标签: c++rdoublercpp

解决方案


试试这样:

NumericVector resV = NumericVector::create(calc(1.00, 0.00, 3.00));

推荐阅读