【发布时间】:2010-10-15 23:24:15
【问题描述】:
我正在尝试测量一个函数需要多长时间。
我有一个小问题:虽然我试图精确并使用浮点数,但每次我使用 %lf 打印我的代码时,我都会得到以下两个答案之一:1.000... 或 0.000。 .. 这让我怀疑我的代码是否正确:
#define BILLION 1000000000L;
// Calculate time taken by a request
struct timespec requestStart, requestEnd;
clock_gettime(CLOCK_REALTIME, &requestStart);
function_call();
clock_gettime(CLOCK_REALTIME, &requestEnd);
// Calculate time it took
double accum = ( requestEnd.tv_sec - requestStart.tv_sec )
+ ( requestEnd.tv_nsec - requestStart.tv_nsec )
/ BILLION;
printf( "%lf\n", accum );
大部分代码不是我编写的。此示例页面的代码说明了 clock_gettime 的用法:
谁能告诉我什么是不正确的,或者为什么我只能得到int 值?
【问题讨论】:
-
不,不,不:不要给数字起名字。改用他们提供的功能:
#define CLOCK_PRECISION 1000000000L /* one billion */ -
@pmg: Pedantry tangent:我认为只有当变量名称中的单位不明确时,才需要使用诸如
CLOCK_PRECISION这样的名称。在上面的例子中,从名称tv_nsec可以清楚地看出我们在纳秒内。所以NANOSECONDS_PER_SECOND可能是合适的,但这与简单的BILLION并没有太大的不同。 -
CLOCK_REALTIME受系统时间不连续跳转的影响。考虑使用CLOCK_MONOTONIC_RAW——它不受adjtime()的时间调整和时间跳跃的影响。