Sebastian Eiser
2008-Apr-29 22:52 UTC
[R] behaviour of .Fortran in terms of "double precision" and "real" datatype
Hello R-world! This is my first post to the R list, so I feel that I need to say thanks to the community (I'm using R now for 5 months)! I'd greatly appreciate if somebody could explain some odd behavior of ".Fortran" to me. Let's assume a primitive Fortran subroutine barfoo.f ---------------------------- subroutine bar(y, v) double precision y real v y = 1.455523 v = 3.2 end ---------------------------- after $ R CMD SHLIB barfoo.f (uses gfortran & gcc), I switch to R-2.6.2 R> dynload("barfoo.so") R> .Fortran("bar", y=as.double(3), v=as.real(2.1)) $y [1] 1.455523 $v [1] 2.099999 -------------- the double value of y changes according to the programme, but the v value is not being updated (besides an error is made). The reason why I"m interested is because I want to run an elaborate Fortran programme within a MCMC in R. All arguments for the programme are 'real'. Could somebody explain to me what's going on? Also, feel free to try that on your machine. thanks very much in advance, Sebastian [[alternative HTML version deleted]]
Duncan Murdoch
2008-Apr-30 00:45 UTC
[R] behaviour of .Fortran in terms of "double precision" and "real" datatype
On 29/04/2008 6:52 PM, Sebastian Eiser wrote:> Hello R-world! > > This is my first post to the R list, so I feel that I need to say thanks to > the community (I'm using R now for 5 months)! > > I'd greatly appreciate if somebody could explain some odd behavior of > ".Fortran" to me. Let's assume a primitive Fortran subroutine > > barfoo.f > ---------------------------- > subroutine bar(y, v) > double precision y > real v > > y = 1.455523 > v = 3.2 > > end > ---------------------------- > > after $ R CMD SHLIB barfoo.f (uses gfortran & gcc), I switch to R-2.6.2 > R> dynload("barfoo.so") > R> .Fortran("bar", y=as.double(3), v=as.real(2.1)) > $y > [1] 1.455523 > > $v > [1] 2.099999 > -------------- > the double value of y changes according to the programme, but the v value is > not being updated (besides an error is made).as.real() is the same as as.double(). You want as.single(), or to convert the Fortran code to use double. R doesn't use single precision internally; it will convert everything back and forth from double just for the call. Duncan Murdoch> > The reason why I"m interested is because I want to run an elaborate Fortran > programme within a MCMC in R. All arguments for the programme are 'real'. > Could somebody explain to me what's going on? Also, feel free to try that on > your machine. > > thanks very much in advance, > Sebastian > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.