Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB代码中保持非关联性_Matlab_Fortran - Fatal编程技术网

如何在MATLAB代码中保持非关联性

如何在MATLAB代码中保持非关联性,matlab,fortran,Matlab,Fortran,我有一个稍微简单的问题,但在将Fortran-90代码转录到MATLAB时,我无法重现正确的答案 以下MATLAB代码使用整数i0=842739021913初始化。这是Fortran-90代码的一部分,由更通用的整数随机数生成器例程组成 i0 = 842739021913 ; function x_tdrand = tdrand ia = int32(513) ; ib = int32(29741096258473) ; it = int32(140737488355328) ;

我有一个稍微简单的问题,但在将Fortran-90代码转录到MATLAB时,我无法重现正确的答案

以下MATLAB代码使用整数
i0=842739021913
初始化。这是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 

int32
对于您来说可能太小了,因为您的所有Fortran整数(可能)都是64位的。试试
int64
。可能调查
i也提供了
。@HighPerformanceMark-是的,int64完成了这个任务。非常感谢。很少有人警告,那些大的文本在fortran代码中应该有一个
\u8
。@agentp-谢谢你的提示。想详细说明一下吗?我应该更仔细地定义大数吗?是的,定义为
29741096258473_8
,尽管命名常量比仅定义文字8要好。