案子
我已经将用于 dyn.loading 的共享库编译到 R 中。然后,当我在 RI 中调用包装函数时,会得到四舍五入的结果,并在小数点后截断部分。我可能遗漏了一些众所周知的东西,因为这是我第一次尝试使用 .C 函数,但我找不到舍入的原因。下面是我的代码。
我的 C 代码
#include <freesteam/steam_pT.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <R.h>
// gcc -Wall -fPIC -c Rsteam_h_pT_2.c -o Rsteam_h_pT_2.o -I/usr/local/include -I/opt/R-2.14.0/lib/R/include -L/usr/local/lib -lfreesteam
// gcc -Wall -shared -o Rsteam_h_pT_2.so Rsteam_h_pT_2.o -I/usr/local/include -I/opt/R-2.14.0/lib/R/include -L/usr/local/lib -lfreesteam
// function
double steam_h_pT(double p, double T){
SteamState S = freesteam_set_pT(p, T);
double s = freesteam_h(S);
return s;
}
// wrapper
double steam_h_pT(double, double);
void steam_h_pT_R_wrapper(double *p, double *T, double *result) { *result = steam_h_pT(*p, *T); }
我的 R 函数
steam_h_pT <- function(p_Pa,T_K)
{
dyn.load('Rsteam_h_pT.so')
# Call the C function
returned_data = .C('steam_h_pT_R_wrapper', p=as.numeric(p_Pa), T= as.numeric(T_K), result=numeric(1))
# Return the value of the result parameter
return(returned_data$result)
}
我的 R 会话
> steam_h_pT(100000,400)
[1] 2730398
> str(steam_h_pT(100000,400))
num 2730398
>
原始代码的预期结果
bash>./steam_h_pT 1e5 400
2730397.845968
现在,为什么它会在 R 中四舍五入?