0

私はFortranでプログラムを書いていますが、プログラムの継続時間をミリ秒単位で計算する方法が必要です。私は関数「date_and_time」を使用してきました。これにより、システムの時刻(時、分、秒、ミリ秒)を含む配列が残ります。

プログラムの開始時にこの関数を呼び出して現在の時刻を保存し、プログラムの終了時にこの関数を再度呼び出して最新の時刻を保存できると思います。しかし、その後、どのように期間を計算しますか?値を減算してみましたが、1分が経過すると秒がリセットされるのと同じように、1秒が経過するとミリ秒がリセットされます。これにアプローチする最善の方法はどのようになりますか?

プログラムは次のとおりです。

       PROGRAM TEST_TIME_AND_DATE
          INTEGER I
          REAL J
          INTEGER TIME_A(8), TIME_B(8)
          CALL DATE_AND_TIME(VALUES=TIME_A)
          PRINT '(8I5))', TIME_A
          DO I = 0, 400000000
            J = I * I - J
          END DO
          CALL DATE_AND_TIME(VALUES=TIME_B)
          print '(8I5))', TIME_B
      END PROGRAM TEST_TIME_AND_DATE

そしてここに結果があります:

2011    6   11 -300    9   14   49  304
2011    6   11 -300    9   14   50  688

ここで何をすべきかわからない、ありがとう。

4

3 に答える 3

2

経過クロック時間が必要な場合は、単一の時間値出力を提供するため、組み込みプロシージャsystem_clockを使用する方が簡単です。(プロシージャに関する情報を提供するための追加の引数があります。そのため、関数ではなくプロシージャです。)たとえば、 http: //gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.htmlを参照してください。CPU使用率の時間を計測する場合は、cpu_timeを使用します。どちらの場合も、プログラムの開始時と終了時の2回の呼び出しで、単純な違いがあります。COUNT_RATE引数を使用して、時間の整数カウントを秒に変換できます。

于 2011-06-11T16:20:49.430 に答える
0

数値を減算してから、すべてをミリ秒に変換し、ミリ秒、秒をミリ秒、分をミリ秒、時間をミリ秒で合計することができます...

あなたの場合、これは

0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]

このアプローチは、オーバーフローの場合にも正常に機能します。これは、左にある列の正の数がすべて同じ基準に変換された場合、負の数よりも重要になるためです。例:0:58.000利回り1:02.200

1 * 60000 + (-56) * 1000 + 200 = 4200

これは数日までは機能しますが、共通の長さを共有しないため、数か月では機能しないことに注意してください。

于 2011-06-11T14:22:18.010 に答える
0

開始時刻(UNIXの場合は1970年1月1日)からのオフセットを秒またはミリ秒で計算できます。それらの数字の違いはあなたの経過時間です。

(2011 - 1970) * (number of seconds in a year) +
(month of the year - 1) * (number of seconds in a month) +
(day of the month - 1) * (number of seconds in a day) + 
( ... )
于 2011-06-11T16:51:54.110 に答える