我在Fortran中处理实数时遇到了麻烦,我和R一起使用。下面的代码是用Fortran编写的:
Subroutine realtest(lol)
implicit none
Real lol
lol = 10.0
End
我使用命令R CMD SHLIB realtest.f
进行编译。如果我在R中运行共享对象:
dyn.load("realtest.so")
res <- .Fortran("realtest",lol= as.numeric(1.2))
lol
的结果值是1.2,但应该是10.如果我用整数做整件事,我得到正确的值10。
答案 0 :(得分:3)
尝试使用double precision
代替real
;以下对我有用:
! realtest.f90
!
subroutine realtest(x)
implicit none
double precision, intent(inout) :: x
x = 10.0
end subroutine realtest
来自R,
dyn.load("realtest.so")
res <- .Fortran("realtest", x = as.double(1.2))
res
# $x
# [1] 10
答案 1 :(得分:-1)
您应该将lol
声明为real*8
,因为R使用双精度浮点数。