我有一塊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,5,0給出了作爲R 13.19 12.69和在C.從技術上來說,R代碼是矢量化的,但是這個特定的C代碼塊並不是這樣,所以我不想提供一個矢量化輸入作爲例子。
這些功能是相同的,還是我在做一些不正確的事情?
請提供一些結果不一致的輸入,以及相應的輸出。 – NPE
有多少不同?我的意思是3.1415 vs 3.1416或2.7172 vs 1.4142? – BlackBear
sqrt(exp(pow(sigmaEta,2)) - 1),錯誤位置 –