我有一个简单的问题,但在将Fortran-90代码转录到MATLAB时,我无法重现正确的答案。
使用整数i0 = 842739021913
初始化以下MATLAB代码。这是Fortran-90代码的一部分,由更通用的整数随机数生成器例程组成。
i0 = 842739021913 ;
function x_tdrand = tdrand
ia = int32(513) ; ib = int32(29741096258473) ; it = int32(140737488355328) ;
t = 1.40737488355328e14 ;
i0 = ia*i0+ib ;
i0 = i0-(i0/it)*it ;
x_tdrand = i0/t ;
end
i0
的第二次计算(即i0=i0-(i0/it)*it
)应该在Fortran-90中给出i0=39853749433858
(见下文),但是使用MATLAB我显然得到零。
感谢您对如何正确复制Fortran代码的任何建议。
SUBROUTINE TDRAND(X)
USE module_GENERAL, ONLY: I0
IMPLICIT NONE
INTEGER(8) :: IA, IB, IT
DOUBLE PRECISION :: X, T
DATA IA, IB, IT /513, 29741096258473, 140737488355328/
DATA T /1.40737488355328D14/
I0=IA*I0+IB
I0=I0-(I0/IT)*IT
X=DBLE(I0)/T
RETURN
END SUBROUTINE TDRAND