我需要生成大量的随机数(从零到1,均匀分布)。使用PGI Fortran生成许多随机数时出现分段错误
我最初有一个Do循环,并在飞行中产生的随机数为这样:
Real :: RandomN
Integer :: N
DO N = 1, 10000
Call RANDOM_NUMBER(RandomN)
... Some Code ...
ENDDO
然而,生成数字时(如果我评论了“呼叫RANDOM_NUMBER(我得到一个分段错误RandomN)“线,它工作正常)。
然后在PGI论坛上阅读帖子(http://www.pgroup.com/userforum/viewtopic.php?t=713&highlight=randomseed)。我决定首先生成所有数字并将它们放入数组中。
Real :: RndNum(1:10000,1:5)
Integer :: time(8), seed(2)
Call DATE_AND_TIME(values=time) ! Get the current time
seed(1) = time(4) * (360000*time(5) + 6000*time(6) + 100*time(7) + time(8))
Call RANDOM_SEED(PUT=seed)
Call RANDOM_NUMBER(RndNum)
但是,这给了我一个段错误马上。我已经尝试了减少的版本,没有种子:
Real :: RndNum(1:10000,1:5)
Call RANDOM_NUMBER(RndNum)
这作品的我的代码几次迭代,然后产生一个分段错误也是如此。我是否使用了某种内存?有没有办法清除它?或防止它被用完?
我也曾尝试:
CALL SYSTEM_CLOCK(count, count_rate, count_max)
CALL srand(count)
DO N=1, CAPN
RndNum(N,1) = rand()
RndNum(N,2) = rand()
RndNum(N,3) = rand()
RndNum(N,4) = rand()
RndNum(N,5) = rand()
ENDDO
但是,这也给了段错误。
如果它给你segfault,显示**完整的代码**。包括'program'和'end program'的所有内容。见[mcve]。重新编辑:当你尝试时发生了什么? –
完整的代码是几行1000行,涉及多个文件。我已经隔离了这个问题,并试图解释导致问题的那一点。 –