我想测量一个函数需要多长时间.
我有一个小问题:虽然我想要精确,并使用浮点,每次我使用%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 );
Run Code Online (Sandbox Code Playgroud)
大部分代码都不是由我做的.此示例页面包含说明clock_gettime使用的代码:http://www.users.pjwstk.edu.pl/~jms/qnx/help/watcom/clibref/qnx/clock_gettime.html
任何人都可以让我知道什么是不正确的,或者为什么我只得到整数值?
非常感谢你,
Jary
Mar*_*tos 26
将整数除以整数会产生整数.试试这个:
#define BILLION 1E9
Run Code Online (Sandbox Code Playgroud)
并且不要在行尾使用分号.#define是一个预处理器指令,而不是一个语句,并包括导致BILLION被定义为的分号1000000000L;,如果你试图在大多数情况下使用它,它会破坏.你很幸运,因为你在表达的最后和任何括号之外使用它.
( requestEnd.tv_nsec - requestStart.tv_nsec )是整数类型,并且总是小于BILLION,因此在整数运算中将一个除以另一个的结果将始终为0.您需要将减法的结果转换为例如double在进行除法之前.