有人可以清楚我对此代码的疑虑:
1)这个时钟()是什么?它是如何工作的?
2)我在;
语句之后从未见过for
我何时需要在for
之后使用这些分号
并且它会循环通过唯一的下一行代码 int tick = clock(); ?
3)他是否通过这样做来转换为漂浮:(浮动)勾选?我可以做这件事 我首先将每个变量初始化为 short,integer,long,long long ,然后通过执行float(variable_name)将其更改为float?
提前致谢
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int i;
for(i=0; i<10000000; i++);
int tick= clock();
printf("%f", (float)tick/ CLOCKS_PER_SEC);
return 0;
}
答案 0 :(得分:1)
1)这个时钟()是什么?它是如何工作的?
它读取程序的“CPU”时钟(程序到目前为止花了多少时间)。它被称为实时时钟的RTC。精度非常高,应该接近一个CPU周期。
2)我从未见过;在for语句之后我何时需要在for之后使用这些分号并且它将循环通过唯一的下一行代码int tick = clock();?
没有。 ';'意思是“自己循环”。这是错误的,因为如果没有做任何事情,这样的循环可以被优化掉。因此循环所需的循环次数可能会降至零。
所以“他”[希望他]从0到1000万。
3)他是通过这样做来将tick转换为float :( float)tick?我可以用每个变量做这个事情,我首先初始化为short,integer,long,long long,然后通过执行float(variable_name)将其更改为float?
是。但有三个问题:
a)他使用int
作为错误的刻度,他应该使用clock_t
。
b)clock_t可能大于32位,浮点数甚至不能容纳32位整数。
c)printf()反正需要加倍,所以转换为float也不太好,因为它会在之后将浮动转换为double。
所以这会更好:
clock_t tick = clock();
printf("%f", (double)tick / CLOCKS_PER_SEC);
现在,如果您想知道程序运行的总时间,这很好。如果你想知道某段代码需要多长时间,你想在代码之前和之后读取clock(),那么差异就会给你代码运行的时间。