大量の乱数を生成する必要があります(ゼロから1まで、均等に分散します)。PGI Fortranを使用して多数の乱数を生成する際のセグメンテーションフォルト
私が最初にDoループを持っていたなどの場で乱数を生成した数字を生成するときに、私は「コールRANDOM_NUMBERコメントアウト場合
Real :: RandomN
Integer :: N
DO N = 1, 10000
Call RANDOM_NUMBER(RandomN)
... Some Code ...
ENDDO
しかし、私は((セグメンテーションフォールトを得ていました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がある場合は、**フルコード**を表示してください。 'プログラム'と '終了プログラム'を含むすべて。 [mcve]を参照してください。あなたの編集:あなたはそれを試したとき何が起こったのですか? –
フルコードは、長さが1000行で、複数のファイルが含まれています。私は問題を切り離し、問題の原因となっているビットを説明しようとしました。 –