[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