geo*_*try 3 c r rounding-error
我有一个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)
}
Run Code Online (Sandbox Code Playgroud)
现在在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);
}
Run Code Online (Sandbox Code Playgroud)
作为一个例子,传入值5,5,5,0给出了作为R 13.19和C.技术上12.69将R代码被矢量但C代码这个特定的块不是所以不希望提供一个矢量输入作为一个例子.
这些在功能上是相同的,还是我做错了什么?
pmg*_*pmg 13
你的表情是不同的:
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