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 回答