【发布时间】:2021-04-15 21:22:08
【问题描述】:
在研究 time.h 中的 clock() 函数时,我问自己一个问题,即编写一个简单的程序来看看它是如何工作的。运行这个程序时我很惊讶,结果显示为 0,而我的预期是 2。我错在哪里?
int main(int argc, char const *argv[]){
int msec = 0;
clock_t before = clock();
sleep(2);
clock_t difference = clock() - before;
msec = difference * 1000 / CLOCKS_PER_SEC;
printf("Time taken %d seconds\n",msec/1000);
}
【问题讨论】:
-
我建议
double msec = difference * 1000.0 / CLOCKS_PER_SEC;并打印double。 -
来自man page:“如果使用的处理器时间不可用或者它的值不能表示,函数返回值(clock_t) -1。”在
clock ()两个电话中你发生了什么,所以你有-1-(-1)=0? -
@WeatherVane 这个顺序是否比除然后乘更好?我读过某个地方,如果它们远离
0..abs(1)范围,则双精度会丢失。 -
@yvw 当我使用 MS 函数
Sleep(2000)运行它时,它报告了1,但在使用double时它报告了1.999999。此外,clock()的 MS 实现不符合标准,因为它测量的是挂墙时间。 -
@WeatherVane 正如你所说。计算顺序在这里有影响吗?
标签: c unix system-calls time.h