3
#include <stdio.h>
#include <sys/time.h>

int main()
{
   float time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %f\n", time );
   return 0;
}

このコードによって生成されたバイナリを繰り返し実行すると、同じ時間値が得られる傾向があります。

$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000

これは、更新された時間値を取得する数秒後まで発生します。

4

2 に答える 2

4

floatは の結果を含めるには小さすぎるようですtv.tv_sec + ( tv.tv_usec / 1000000.0 )double代わりに使用してください:

#include <stdio.h>
#include <sys/time.h>

int main()
{
   double time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %f\n", time );
   return 0;
}
于 2012-09-19T13:04:50.257 に答える
3

なぜ浮動小数点を使用するのですか?

#include <stdio.h>
#include <sys/time.h>

int main (void)
{
   struct timeval tv;
   gettimeofday (&tv, NULL);
   printf ("time: %d.%06d\n", (int)tv.tv_sec, (int)tv.tv_usec);
   return 0;
}

./a.out
time: 1348067289.069908

浮いているように見えますが、それはinty です:-) マイクロ秒の値は 0..999999 の範囲にあるので、6 桁になるようにゼロで埋めるだけです。FP 演算は必要ありません。

于 2012-09-19T15:00:34.127 に答える