【发布时间】:2011-02-05 04:33:30
【问题描述】:
我想知道将哪些 C 代码行添加到程序中,以便它告诉我程序运行所需的总时间。我猜应该在 main 开始附近和 main 函数结束后有一个计数器初始化。是正确的标题clock.h吗?
非常感谢...
更新我有一台 Win Xp 机器。是否只是在程序开头添加clock() 并在程序末尾添加另一个clock()?然后我可以估计时间差。是的,没错,它是time.h。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <share.h>
#include <time.h>
void f(long double fb[], long double fA, long double fB);
int main() {
clock_t start, end;
start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A, B;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
B = 2;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A, B);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
end = clock();
printf("Took %ld ticks\n", end-start);
printf("Took %f seconds\n", (double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA, long double fB) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
MVS2008 的一些错误:
testim.c(16):错误 C2143:语法错误:缺少“;”在“常量”之前 testim.c(18) :error C2143: 语法错误: 缺少';'在“类型”之前 testim.c(20) :error C2143: 语法错误: 缺少';'在“类型”之前 testim.c(21) :error C2143: 语法错误: 缺少';'在“类型”之前 testim.c(23) :error C2065: 'z' : undeclared identifier testim.c(23) :warning C4047: '==' : 'int' 与 'void *' 的间接级别不同 testim.c(28):错误 C2065:'A':未声明的标识符 testim.c(28) : 警告 C4244: '=' : 从 'double' 转换为 'int',可能丢失数据它会出现 28 个错误。请注意,如果没有您的时钟代码,我没有任何错误/警告。
最新消息:很遗憾,我在这里没有得到好的答复。但在谷歌上搜索后,代码是有效的。这里是:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void f(long double fb[], long double fA);
int main() {
clock_t start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
printf("Took %f seconds\n", ((double)clock()-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
干杯
4 月 10 日更新:感谢“JustJeff”,这是一个更好的解决方案
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
void f(long double fb[], long double fA);
const int ARRAY_SIZE = 11;
int main(void)
{
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
LARGE_INTEGER freq;
LARGE_INTEGER t0, tF, tDiff;
double elapsedTime;
double resolution;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
// code to be timed goes HERE
{
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
}
QueryPerformanceCounter(&tF);
tDiff.QuadPart = tF.QuadPart - t0.QuadPart;
elapsedTime = tDiff.QuadPart / (double) freq.QuadPart;
resolution = 1.0 / (double) freq.QuadPart;
printf("Your performance counter ticks %I64u times per second\n", freq.QuadPart);
printf("Resolution is %lf nanoseconds\n", resolution*1e9);
printf("Code under test took %lf sec\n", elapsedTime);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
它适用于 MVS2008 和 2003 年的 Borland C++ builderX。
【问题讨论】:
-
如果您觉得自己现在拥有最佳答案,您可以发布答案并接受它。这样做可能有助于其他人寻找手头问题的答案(我相信其他人一直在寻找这个问题)。
-
我不知道我是否有正确的答案。但它正在工作。我总是欢迎建设性的建议,因为我还在学习。我可以接受(打勾)我自己的答案吗?
-
是的,你可以。顺便说一句,不要故意粗鲁,但你怎么没有在这里得到好的答复?你有几个很好的答案,应该可以。如果您遇到错误,那是您自己的代码,而不是回答者给您的代码。如果您认为您得到的答案不好,请说明我们如何改进它们。
-
我用 MVS2008 测试了这里的建议,正如我在帖子中提到的那样,我遇到了错误。我是 C 编程的新手。我不能说为什么这里建议的代码不起作用。我从谷歌得到了答案,用我的代码对其进行了测试,它似乎正在工作。随着我随着时间的推移提高我对 C 的知识,我可以有一天回来并指出这里建议的代码中的任何错误。我自己的代码可能有一些东西。我还不知道这个。我是来学习和分享知识的。由于我在 C 方面的知识有限,我很难成为信息提供者,但这会改变。