[Rd] .Call and .C arguments

From: Roger Bergande <bergarog_at_gmail.com>
Date: Mon, 29 Mar 2010 13:56:14 +0200

Dear List

My question is about .C and .Call

I was experimenting with the .C and .Call interface as I came across the following behaviour.

The passed values are not the same in C. I 'm calling a function in C with the argument as.double(1204.245) but in the debug mode in C the value has changed to 1204.2449999999999999.

Is there a way to pass the arguments differently?

I'm using Windows and Visual Studio C++ 2005 Express Edition and R-2.10.1.

Please see the two simple examples to understand the issue.

# C call from R

.C("myroundC",as.double(1204.245))

// C Code

void myroundC(double *Amount){

            *Amount = Rf_fround(*Amount,2);

}

#Return value in R

[[1]]

[1] 1204.24

# C call from R

.Call("myroundCall",as.double(1204.245))

// C Code

SEXP myroundCall(SEXP a){

            double *ap = REAL(a), *ansp;

            SEXP ans;

            PROTECT(ans = allocVector(REALSXP, 1));

            ansp = REAL(ans);

            *ansp = Rf_fround(*ap,2);

            UNPROTECT(1);             return(ans);

}

#Return value in R

[1] 1204.24

# expected value 1204.25

Thanks a lot for your help.

Best regards

Roger Bergande



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 29 Mar 2010 - 11:58:43 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 29 Mar 2010 - 15:21:17 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive