我需要生成大量的隨機數(從零到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行,涉及多個文件。我已經隔離了這個問題,並試圖解釋導致問題的那一點。 –