为什么这个Fortran随机数生成器会导致分段错误?

And*_*rew 0 fortran fortran90

ran0从文本数字食谱中获取了以下功能.我写了自己的程序random2来打电话ran0.

为什么此代码会导致分段错误?谢谢你的时间.

FUNCTION ran0(idum)
  INTEGER idum,IA,IM,IQ,IR,MASK
  REAL ran0,AM
  PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,MASK=123459876)
  INTEGER k
  idum=ieor(idum,MASK)
  k=idum/IQ
  idum=IA*(idum-k*IQ)-IR*k
  if (idum.lt.0) idum=idum+IM
  ran0=AM*idum
  idum=ieor(idum,MASK)
  return
END FUNCTION

PROGRAM random2
  IMPLICIT NONE
  REAL :: ran0
  PRINT *, ran0(6)
END PROGRAM
Run Code Online (Sandbox Code Playgroud)

Ian*_*anH 5

将常量6.0作为IDUM伪参数传递给函数.然后(尝试)使用诸如idum = ieor(...)等行修改此参数.您实际上是在尝试修改常量.

6.0的值已经修复了一段时间 - 足够长,大多数程序员都希望它能在5.0到7.0之间找到它.请不要尝试更改它.