【发布时间】:2015-04-27 20:22:07
【问题描述】:
我在 C 中使用函数 clock() 来通过滴答声获取秒数,但是通过下面这个小测试程序,我发现我的处理器没有正确计算滴答声,因为秒数与实时,此外,我必须将结果乘以 100 才能得到更类似于秒的结果,但我认为这没有意义。在这个程序中,10s 几乎相当于现实生活中的 7s。有人可以帮我将clock() 函数变得更精确吗?
我正在使用带有内核 3.8.13-bone70、Debian 4.6.3-14 和 gcc 版本 4.6.3 的 Beaglebone Black rev C
提前致谢!
这是我的测试程序:
#include <stdio.h>
#include <time.h>
int main(){
while(1)
printf("\n%f", (double)100*clock()/CLOCKS_PER_SEC);
return 0;
}
【问题讨论】:
-
这是否意味着当你在命令提示符下输入日期命令时,显示的时间越来越远?
-
顺便说一句:%f 是浮点数,而不是双精度数。 %lf 是双倍的
-
@user3629249:这是不正确的。
%f对于float和double都是正确的,因为float参数被提升为double(因为printf是一个可变参数函数)。long double的正确格式是%Lf,而不是%lf。 -
@user3629249: 在
printf中两者都是(实际上只是double,但floats 在传递给可变参数函数时总是隐式转换为double)。 -
@user3629249:你完全错了。
printf的%f格式用于double类型的参数。float参数被提升为double,所以%f也适用于它们。也许您正在考虑scanf,它有不同的规则(因为它需要指针参数并且它们没有被提升)?请参阅N1570,第 7.21.6.1 节,第 8 段(%f)和第 7 段(L长度修饰符)。或者查看任何涵盖 Cprintf函数的参考。