加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

R&C版本的功能会产生不同的结果 – 舍入或运算符错误?

发布时间:2020-12-16 10:30:15 所属栏目:百科 来源:网络整理
导读:我有一个R代码块,我在C中重写了,这两个版本提供了不同的结果.我认为这是由于R级别的舍入问题,即正在执行多个数学运算,这会产生复杂的舍入问题,而不是整个事情在C中进行并且舍入仅发生一次.我担心我在这里过于乐观,并希望能有更多的眼睛看看我是否遗漏了一些
我有一个R代码块,我在C中重写了,这两个版本提供了不同的结果.我认为这是由于R级别的舍入问题,即正在执行多个数学运算,这会产生复杂的舍入问题,而不是整个事情在C中进行并且舍入仅发生一次.我担心我在这里过于乐观,并希望能有更多的眼睛看看我是否遗漏了一些东西而且实际上我的编码很糟糕.

首先是R代码:

h_tx <- function(x,sigma_nu,sigma_eta,alpha=0) {
   b <- (sqrt(exp(sigma_eta^2) - 1)) / sigma_nu
   a <- -alpha * b
   asinh(a+b*x)
}

现在在C:

double hTx(double x,double sigmaNu,double sigmaEta,double alpha) {
  double a;
  double b;
  double ret;

  b = (sqrt(exp(pow(sigmaEta,2)-1))) / sigmaNu;
  a = -alpha * b;
  return asinh(a + b * x);
}

作为一个例子,传入值5,5,0在R中给出13.19,在C中给出12.69.技术上,R代码是矢量化的,但是这个特定的C代码块不是这样我不想提供矢量化输入一个例子.

这些在功能上是相同的,还是我做错了什么?

解决方法

你的表情是不同的:

       b <- (sqrt(exp(sigma_eta^2) - 1)) / sigma_nu
            1    2   3-----------3    21
                 ------------------//
              ----------------------/

-1位于括号的第2组中:sqrt

       b = (sqrt(exp(pow(sigmaEta,2)-1))) / sigmaNu;
           1    2   3   4----------4  321
                   ---------------///
                 ------------------//
              ----------------------/

-1位于括号的第3组中:exp

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读