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
如何使用Random()运行子例程 我试图将FORTRAN 77代码转换成C++。我通过cygwin使用gfortran编译器。我已经成功地转换了大部分代码,但由于它依赖于Random(),因此无法运行此子例程。根据我正在读的书,子程序是 SUBROUTINE GAUSS(X,SIG) IMPLICIT REAL*8(A-H) IMPLICIT REAL*8(O-Z) INTEGER SUM SUM=0 DO 14 J=1,6 C THE NEXT STATEMENT PRODUCES A UNIF. DISTRIBUTED NUMBER FROM -32768 TO +32768 IRAN=Random() SUM=SUM+IRAN 14 CONTINUE X=SUM/65536 X=1.414*X*SIG RETURN END_Fortran_Cygwin_Fortran77 - Fatal编程技术网

如何使用Random()运行子例程 我试图将FORTRAN 77代码转换成C++。我通过cygwin使用gfortran编译器。我已经成功地转换了大部分代码,但由于它依赖于Random(),因此无法运行此子例程。根据我正在读的书,子程序是 SUBROUTINE GAUSS(X,SIG) IMPLICIT REAL*8(A-H) IMPLICIT REAL*8(O-Z) INTEGER SUM SUM=0 DO 14 J=1,6 C THE NEXT STATEMENT PRODUCES A UNIF. DISTRIBUTED NUMBER FROM -32768 TO +32768 IRAN=Random() SUM=SUM+IRAN 14 CONTINUE X=SUM/65536 X=1.414*X*SIG RETURN END

如何使用Random()运行子例程 我试图将FORTRAN 77代码转换成C++。我通过cygwin使用gfortran编译器。我已经成功地转换了大部分代码,但由于它依赖于Random(),因此无法运行此子例程。根据我正在读的书,子程序是 SUBROUTINE GAUSS(X,SIG) IMPLICIT REAL*8(A-H) IMPLICIT REAL*8(O-Z) INTEGER SUM SUM=0 DO 14 J=1,6 C THE NEXT STATEMENT PRODUCES A UNIF. DISTRIBUTED NUMBER FROM -32768 TO +32768 IRAN=Random() SUM=SUM+IRAN 14 CONTINUE X=SUM/65536 X=1.414*X*SIG RETURN END,fortran,cygwin,fortran77,Fortran,Cygwin,Fortran77,在代码的顶部,有以下内容 C THE FIRST THREE STATEMENTS INVOKE THE ABSOFT RANDOM NUMBER GENERATOR ON THE MACINTOSH GLOBAL DEFINE INCLUDE 'quickdraw.inc' END 用这条线 gfortran-std=legacy Listing_4_3.f90-o test 我犯了这个错误 /tmp/ccQ2l529.o:Listing_4_3.f90:(.text+0x1b): unde

在代码的顶部,有以下内容

C THE FIRST THREE STATEMENTS INVOKE THE ABSOFT RANDOM NUMBER GENERATOR ON THE MACINTOSH
GLOBAL DEFINE
INCLUDE 'quickdraw.inc'
END
用这条线

gfortran-std=legacy Listing_4_3.f90-o test

我犯了这个错误

/tmp/ccQ2l529.o:Listing_4_3.f90:(.text+0x1b): undefined reference to `random_'
collect2: error: ld returned 1 exit status

如何运行此代码

忽略高斯分布的这种方法效率非常低的事实,您可以使用

call random_number(rran)
rran = rran - 0.5
所以

代码仍然包含一些难看的东西,但当您将其转换为另一种语言时



如果您的目的是在新代码中准确地复制此方法存在的问题,那么您可以使用此方法。否则,请对高斯随机数使用更好的方法,不要惊讶它会有所不同,因为此子例程中的方法不仅效率低下,而且不精确。好方法的结果会有所不同。

您需要提供一个函数
random
。如果要相信这个评论,写一篇应该不难。@francescalus我不懂Fortran。此功能是否包含在“quickdraw.inc”中?您可以使用
rand
而不是Random。但是你需要调整代码,它可能是在那里定义的-你有它的来源吗?如果将
implicit none
放在中,替换其他
implicit
语句,至少会得到一个更有用的编译时错误(而不是链接时)。我强烈建议不要按照建议使用非标准函数
rand
。使用
random_number
并映射到所需范围的整数。
SUBROUTINE GAUSS(X,SIG)
    IMPLICIT REAL*8(A-H)
    IMPLICIT REAL*8(O-Z)
    REAL*8 SUM, RRAN
    INTEGER J
    SUM=0
    DO J=1,6 
      CALL RANDOM_NUMBER(RRAN)   
      RRAN = RRAN - 0.5
      SUM=SUM+RRAN
    END DO
    X = 1.414*SUM*SIG
END