c++ - 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
我已经尝试过的:
将双精度转换为 NumericVector res 并且仅使用 res[0] >不工作
尝试浮动>不工作
直接在 other_function 中进行计算 >相同的错误
更新:
每次我尝试在其他函数中调用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 包解决了这个问题。我不知道为什么我得到这个错误......无论如何,现在它可以工作了。
解决方案
试试这样:
NumericVector resV = NumericVector::create(calc(1.00, 0.00, 3.00));
推荐阅读
- c# - Blazor 表单上多个组件的绑定和验证
- r - 如何使用 R 中的数据框元素创建随机游走?
- java - 如何在从本机android访问颤振资源时将键字符串转换为可绘制(int)
- azure - Azure 静态 Web 应用程序的更深入分析?
- python - 如何在可滚动、可调整大小的命令窗口中启动 Python 程序(在 Windows 中)
- javascript - 如何添加新项目并在没有超时的情况下呈现它?反应
- r - 计算 R 中特定过去时间长度内当前两个 ID 对的出现次数
- flutter - 获得“未来”
' 不是“字符串”类型错误的子类型,为什么要在颤振应用程序中从网站上抓取数据? - python - Spyder IDE:重新启动内核..,spyder 中的 ipython 控制台
- vim - 如何使用 VISUAL BLOCK 选择不同大小的单词?