我有一个用 C 重写的 R 代码块,这两个版本提供了不同的结果。我的信念是,这是由于 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、5、0 在 R 中给出 13.19,在 C 中给出 12.69。从技术上讲,R 代码是矢量化的,但这个特定的 C 代码块不是,所以我不想提供矢量化输入一个例子。
这些功能是否相同,或者我做错了什么?