0

如帖子中所述:

Rcpp 和 boost:它应该可以工作,但不能

我正在尝试在 Windows 的 Rcpp 中使用 boost。(简化的)文件是:

// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/multiprecision/float128.hpp>

namespace mp = boost::multiprecision;

// [[Rcpp::export]]
std::string qexp(double da = -1500.0, double db = -1501.0)
{
  mp::float128 a(da), b(db);
  mp::float128 res = mp::exp(a) / (mp::exp(a) + mp::exp(b));
  return res.convert_to<std::string>();
}

我有一个编译问题。正如@duckmayr 在那篇文章中建议的那样,我尝试了:

Sys.setenv("PKG_LIBS" = "-lquadmath")

接着Rcpp::sourceCpp('quadexp.cpp')

这样,编译运行不会出错。但是,当我执行 qexp() 时,我在 RStudio 中收到一条关于“致命错误”的消息,并且 RStudio 完全关闭。你知道会发生什么吗?我认为我的问题是由于我的某种配置造成的,因为@duckmayr 可以毫无问题地运行相同的代码。为了避免这种令人讨厌的“致命错误”,我的配置应该查看哪些部分?

4

1 回答 1

1

除了上面的评论:

edd@rob:~/git/so-r/52933795$ cat code.cpp
// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/multiprecision/float128.hpp>

namespace mp = boost::multiprecision;

// [[Rcpp::export]]
std::string qexp(double da = -1500.0, double db = -1501.0) {
    mp::float128 a(da), b(db);
    mp::float128 res = mp::exp(a) / (mp::exp(a) + mp::exp(b));
    return res.convert_to<std::string>();
}


/*** R
qexp()
*/
edd@rob:~/git/so-r/52933795$ Rscript -e 'Rcpp::sourceCpp("code.cpp")'

R> qexp()
[1] "0.731058578630004879251159241821836351"
edd@rob:~/git/so-r/52933795$

完全使用您的代码(加上添加的 R 调用)它只是“按原样”工作。

于 2018-10-22T16:48:58.777 回答