Re: [Rd] .Call and .C arguments

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Mon, 29 Mar 2010 08:20:36 -0400

On 29/03/2010 7:56 AM, Roger Bergande wrote:
> ---------- Forwarded message ----------
> From: Roger.Bergande@swisslife.ch
> Date: Mon, 29 Mar 2010 13:51:12 +0200
> Subject: .Call and .C arguments
> To: bergarog_at_gmail.com
>
> 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.

>

What makes you think those two numbers are different? See FAQ 7.31.

Duncan Murdoch

>
>
> 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
>



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 29 Mar 2010 - 12:23:41 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 - 13:31:19 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