2

ルーチンの時間を計る必要があり、壁時計の時間が必要なので、time() ルーチンを使用しています。ただし、私のコードには既に time という 2D 配列があるため、startt=time() を実行すると、配列を参照していると見なされます。アレイ名を変更せずにこれを回避するにはどうすればよいですか?

これをバイパスするためにメインプログラムの外に関数を作成しようとしましたが、機能しません:

     program timetest

     real time(0:10,0:10) ! dummy array to demonstrate problem
     integer*8 startt,endt,tdif

     time=0 ! initialize dummy array to 0

     startt=gettime()
     call sleep(2) !stuff to be timed
     endt=gettime()

     tdif=endt-startt
     print*,"tdif= ",tdif

     end

     integer*8 function gettime()
       gettime=time()
       print*,"gettime= ",gettime
     end function

出力:

gettime= 0

gettime= -9223372036854775808

tdif = 0

4

1 に答える 1

5

プログラム単位で同じ名前で 2 つの異なるものを表示することはできません。あなたへの最初の推奨事項は、time() ではなく、Fortran 標準組み込みサブルーチン SYSTEM_CLOCK を使用することです。

呼び出し元で正しいデータ型を使用して gettime を宣言した場合は、別のルーチンで採用したアプローチが機能するはずです。あなたが持っているように、 gettime はメインプログラムでは integer(4) ですが、関数自体では integer(8) です。これらは一致する必要があります。

于 2013-08-14T00:38:43.633 に答える