У меня есть блок кода 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 дает 13,19 в R и 12,69 в C. Технически код Rвекторизация, но этот конкретный блок кода на C не так, поэтому я не хочу приводить в качестве примера векторизованный ввод.
Они функционально одинаковы, или я делаю что-то неправильно?