On 12/07/2008 3:56 AM, Hao Ren Sr wrote:
Hi, I have an error happened when I use exp() in my Fortran code. My Fortran code is
     SUBROUTINE f(n,c)
        
            REAL, INTENT(IN) :: n(10)
            REAL, INTENT(OUT) :: c(10)
            INTEGER :: k
        
            DO k=1, 10
               c(k) = exp( n(k) )
            END DO
END I compiled the fortran code as a dll Rcmd SHLIB -o f.dll f.f -L -lacml Then I loaded the dll file to R, and try some number
dyn.load("C:/Program Files/R/R-2.7.1/bin/code/f.dll")
.Fortran("f",as.real(c(1:10)),A=real(10))
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
$A
[1]  17066.21  58265.20 179948.41 390001.06 576529.12      0.00      0.00
[8] 0.00 0.00 0.00
I tried to figur out what happened, but confused. Any suggestion?

real and as.real set double precision values in R. In Fortran, the REAL type is single precision.

The most efficient thing to do is to declare n and c to be double precision in your Fortran code, but you could use single and as.single in R to have it automatically convert back and forth. There is no single precision type in R, so this is inefficient.

Duncan Murdoch

Thanks
Hao Ren

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to