如何将time_t变量打印为浮点数?

时间:2010-04-13 15:50:23

标签: c time parallel-processing openmp time-t

我在C(openMP环境)中使用time_t变量来保持cpu执行时间...我定义了一个浮点值sum_tot_time来汇总所有cpu的时间...我的意思是sum_tot_time是cpu的time_t值的总和。问题是打印值sum_tot_time它显示为整数或长整数,顺便说一下,没有小数部分!

我试过这些方式:

  1. 以printf sum_tot_time作为双倍值的双重值
  2. 以printf sum_tot_time为浮点值为浮点值
  3. 以printf sum_tot_time为double,为time_t值
  4. 以printf sum_tot_time为float为time_t值

2 个答案:

答案 0 :(得分:3)

在大多数平台上,time_t的分辨率最多为1秒。也就是说,在大多数平台上,time_t 是一个整数(32或64位)值,计算自1970年1月1日午夜(UTC)以来经过的秒数,并且可以只能达到一秒的分辨率。

因此,time_t值的总和也将只显示一秒的分辨率(即使在转换为double后也没有小数部分。)

上面已经说过,您使用什么原生或OpenMP来获取您尝试累积的time_t值?

如果使用本机* nix getrusage()调用以用户/内核时间填充rusage结构(假设您的平台支持它),或者使用gettimeofday()来获取墙时间,然后使用tv_sec的{​​{1}}和tv_usec字段生成struct timeval值(通常为毫秒或更好的分辨率),并使用它而不是计算中double

time_t

相应地,您可以将struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; / GetThreadTimes用于用户/内核时间,或GetProcessTimes用于Windows平台上的待机时间,然后合并_ftime

答案 1 :(得分:0)

我不确定您是否可以访问标准* nix系统调用(或者如果这与您正在进行的操作相关),但如果您这样做,则可以使用timeval struct和{{ 1}}。例如,要打印出一个带有六位小数精度的时间戳,这会产生一个tcpdump样式时间戳(courtesy of Steven UNP

gettimeofday