【问题标题】:Rcpp C++ truncates decimal places no matter whatRcpp C++ 无论如何都会截断小数位
【发布时间】:2018-08-15 15:05:32
【问题描述】:
  • 平台:带有 RStudio Server 的 AWS 实例上的 Redhat Enterprise 7.5。
  • 可重现的代码:对于没有提供代码,我提前道歉,因为如果我将函数简化为可重现的函数,我知道它会起作用并产生预期的结果。
  • 案例:
  • 我有一个使用 Rcpp 用 C++ 编码的函数,该函数包括除以一些非常少量的减法的乘积。例如,它首先执行一些减法,如 (.0012345678 - .0012345677),然后根据这个例子,函数应该除以 .0000000001,但函数会截断减法中的数量 (.001234 - .001234) 并产生零,因此 inf 作为除以零的输出。
    • 我的问题是:在 Rcpp 设置中有什么我应该注意的,以使其产生至少 15 位小数,这样减法就不会产生 inf 或 nan。我编写了另一个小得多的函数,它工作得很好。但是,无论我做什么,更大的函数都会截断进入除法和减法的双精度数据类型数字。

【问题讨论】:

    标签: r decimal rcpp truncate digits


    【解决方案1】:

    请参阅R FAQ 7.31 并在其中参考 - 您在此处处于“epsilon”精度限制。

    Rcpp 使用与 R 和所有其他基于 C 的程序相同的 double 类型。还有long double,但您可能真正想要的是任意/多精度库,例如GNU mpfr,它也有R package Rmpfr

    【讨论】:

    • 谢谢德克。但是 Rmpfr 的任何替代方案,因为我在尝试安装 source package 'gmp' ... configure: error: GNU MP 时遇到以下错误,或者不是 4.1.4 或更高版本,请参阅@987654324 @ 错误:包 'gmp' 的配置失败 * 删除 '/home/ec2-user/R/x86_64-redhat-linux-gnu-library/3.5/gmp' install.packages 中的警告:安装包 'gmp' 没有-零退出状态错误:依赖项'gmp'不适用于包'Rmpfr'
    • 请注意DESCRIPTION 中的条目,其中声明了SystemRequirements: gmp (>= 4.2.3), mpfr (>= 3.0.0)。从源代码安装需要这些;每个 Linux 发行版或 Brew 都应该有它。请注意,您需要 -dev-devel 包来针对此进行构建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多