[R] float and double precision with C code
JS Ubei
jsubei at yahoo.fr
Thu Jul 17 14:47:41 CEST 2008
Hi all,
There is a mistake for wich I need your ligths :
///////////////////////////////////////
I have a small C code :
SEXP testData()
{
SEXP result;
void * rans;
float * my_data;
int my_data_length;
my_data_length = 2;
my_data = new float[my_data_length];
my_data[0] = 29.958334;
my_data[1] = 29.875;
PROTECT(result = allocVector(REALSXP, my_data_length));
rans = (void *)REAL(result);
for(int i=0; i < my_data_length; i++) ((double *)rans)[i] = (double)(my_data[i]);
Rprintf("C value #1 : %f\n", ((double *)rans)[0]);
Rprintf("C value #2 : %f\n", ((double *)rans)[1]);
delete(my_data);
UNPROTECT(1);
return(result);
}
///////////////////////////////////////
And the R corresponding function :
testData <- function()
{
result <- .Call("testData", PACKAGE="my_package")
print(paste("R value #1 :", result[1]))
print(paste("R value #2 :", result[2]))
return(result)
}
///////////////////////////////////////
And in R console, after compilation :
> my_result <- testData()
C value #1 : 29.958334
C value #2 : 29.875000
[1] "R value #1 : 29.9583339691162"
[1] "R value #2 : 29.875"
> my_result[1] == 29.958334
[1] FALSE
???
How can I do to conserve my values ?
Regards,
_______________________________________________________________
e http://mail.yahoo.fr
More information about the R-help
mailing list