Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rcpp和Boost多精度,_R_Boost_Rcpp_Boost Multiprecision - Fatal编程技术网

Rcpp和Boost多精度,

Rcpp和Boost多精度,,r,boost,rcpp,boost-multiprecision,R,Boost,Rcpp,Boost Multiprecision,我想在Rcpp中使用boost/multiprecision。因此,我环顾四周,发现了这些关于boost:and的线索。第一个关于四边形精度的问题正是我想要使用的。问题是我无法编译给定的示例。但是,我可以从第二个线程编译这个示例,该线程只使用boost包中的另一个目录。所以我不知道出了什么问题。来自第一个线程的相关代码: // [[Rcpp::depends(BH)]] #include <Rcpp.h> #include <boost/multiprecision/float

我想在Rcpp中使用boost/multiprecision。因此,我环顾四周,发现了这些关于boost:and的线索。第一个关于四边形精度的问题正是我想要使用的。问题是我无法编译给定的示例。但是,我可以从第二个线程编译这个示例,该线程只使用boost包中的另一个目录。所以我不知道出了什么问题。来自第一个线程的相关代码:

// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/multiprecision/float128.hpp>
#include <boost/multiprecision/mpfr.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>();
}

// [[Rcpp::export]]
std::string mpfr_exp(double da = -1500.0, double db = -1501.0)
{
    mp::mpf_float_100 a(da), b(db);
    mp::mpf_float_100 res = mp::exp(a) / (mp::exp(a) + mp::exp(b));
    return res.convert_to<std::string>();
}
/[[Rcpp::depends(BH)]]
#包括
#包括
#包括
名称空间mp=boost::multiprecision;
//[[Rcpp::导出]]
字符串qexp(双da=-1500.0,双db=-1501.0)
{
mp::128 a(da),b(db);
float128 res=mp::exp(a)/(mp::exp(a)+mp::exp(b));
返回res.convert_to();
}
//[[Rcpp::导出]]
std::string mpfr_exp(双da=-1500.0,双db=-1501.0)
{
mp::强积金浮点数100 a(da),b(db);
mp::mpf_float_100 res=mp::exp(a)/(mp::exp(a)+mp::exp(b));
返回res.convert_to();
}
我得到的错误是:“…/R/win library/3.3/BH/include/boost/multiprecision/gmp.hpp:21:17:致命错误:gmp.h:没有这样的文件或目录
#包括”。但是当我浏览到:“…/R/win library/3.3/BH/include/boost/multiprecision/”文件“gmp.hpp”就在那里。我已经尝试运行了第一个线程中描述的“Sys.setenv(“PKG_LIBS”=“-lmpfr-lgmp”)”,但没有成功。有什么建议吗?如果有问题,我使用的是windows。

您使用的是什么版本的BH?我使用的是BH_1.62.0-1。您需要安装(很可能是MinGW变体)。引用的问题不是文件
boost/multiprecision/gmp.hpp
,而是该标题包含
#include
boost/multiprecision/gmp.hpp
只是核心gmp库的一种包装,因此您仍然需要系统上的
来使用提供gmp功能的boost类。尝试运行
Sys.setenv(“PKG\u CPPFLAGS”=“-IC:\c++\gmp\gmp-6.1.2”)
(或
gmp.h
所在的任何目录)在编译之前,@nrussell太谦虚了,因为他刚刚为此创建了一个教程。