错误 - 在 C 中执行的时间
error - time executing in C
我正在处理项目的第一步,我必须计算求和和乘法的执行时间...我为求和编写了下一个代码:
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[]) {
long muestras = 100000000;
long resultado=0;
float inicial = clock();
printf("Tiempo inicial: %f\n",inicial);
for(int i = 1; i <muestras;i+=1){
resultado = resultado + i;
}
float final = clock();
printf("Tiempo final: %f\n",final);
float total = (final-inicial)/((double)CLOCKS_PER_SEC);
printf("tiempo = %f",total);
//printf("tiempo = %f",((double)clock() - start));
printf("\n");
printf("resultado = %d",resultado);
return 0;
}
并且完美运行,但是我写了下一个乘法代码,初始和最终时间为0...我不知道为什么,我无法理解...
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[]) {
long muestras = 10;
long long resultado=1;
float inicial = clock();
printf("Tiempo inicial: %f\n",inicial);
for(int i = 1; i <muestras;i+=1){
if (resultado>20) {
resultado = (resultado * i)/20;
}else{
resultado = resultado * i;
}
}
float final = clock();
printf("Tiempo final: %f\n",final);
float total = (final-inicial);
///((double)CLOCKS_PER_SEC);
printf("tiempo = %f",total);
//printf("tiempo = %f",((double)clock() - start));
printf("\n");
printf("resultado = %lli",resultado);
return 0;
}
我知道有溢出,但无论样本大小如何,结果都是一样的....请帮忙...抱歉我的英语不好,来自哥伦比亚的伟人! :)
来自 clock
的 return 值是 clock_t
类型,而不是 float
。此外,return 值不是秒或任何类似的值,而是 "clocks",您可以通过除以每秒时钟数将其转换为秒。
你应该这样做:
clock_t initial = clock();
...
clock_t final = clock();
double total = (final - initial) / (double)CLOCKS_PER_SEC;
printf("time delta = %f", total);
注意 there is no way of printfing a value of type clock_t
correctly.
clock()
中的 return 值的类型是 clock_t
而不是 float
,它表示自程序开始以来的滴答数。您应该减去它们,然后转换为 double 以除以 CLICKS_PER_SEC,如 Antti 的回答。
此外,您的乘法程序只执行 10 muestras
,这意味着它可能会在第一个时钟周期内完全完成。将其增加到一个很大的数字,您可能会看到不同的经过时间。
我正在处理项目的第一步,我必须计算求和和乘法的执行时间...我为求和编写了下一个代码:
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[]) {
long muestras = 100000000;
long resultado=0;
float inicial = clock();
printf("Tiempo inicial: %f\n",inicial);
for(int i = 1; i <muestras;i+=1){
resultado = resultado + i;
}
float final = clock();
printf("Tiempo final: %f\n",final);
float total = (final-inicial)/((double)CLOCKS_PER_SEC);
printf("tiempo = %f",total);
//printf("tiempo = %f",((double)clock() - start));
printf("\n");
printf("resultado = %d",resultado);
return 0;
}
并且完美运行,但是我写了下一个乘法代码,初始和最终时间为0...我不知道为什么,我无法理解...
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[]) {
long muestras = 10;
long long resultado=1;
float inicial = clock();
printf("Tiempo inicial: %f\n",inicial);
for(int i = 1; i <muestras;i+=1){
if (resultado>20) {
resultado = (resultado * i)/20;
}else{
resultado = resultado * i;
}
}
float final = clock();
printf("Tiempo final: %f\n",final);
float total = (final-inicial);
///((double)CLOCKS_PER_SEC);
printf("tiempo = %f",total);
//printf("tiempo = %f",((double)clock() - start));
printf("\n");
printf("resultado = %lli",resultado);
return 0;
}
我知道有溢出,但无论样本大小如何,结果都是一样的....请帮忙...抱歉我的英语不好,来自哥伦比亚的伟人! :)
来自 clock
的 return 值是 clock_t
类型,而不是 float
。此外,return 值不是秒或任何类似的值,而是 "clocks",您可以通过除以每秒时钟数将其转换为秒。
你应该这样做:
clock_t initial = clock();
...
clock_t final = clock();
double total = (final - initial) / (double)CLOCKS_PER_SEC;
printf("time delta = %f", total);
注意 there is no way of printfing a value of type clock_t
correctly.
clock()
中的 return 值的类型是 clock_t
而不是 float
,它表示自程序开始以来的滴答数。您应该减去它们,然后转换为 double 以除以 CLICKS_PER_SEC,如 Antti 的回答。
此外,您的乘法程序只执行 10 muestras
,这意味着它可能会在第一个时钟周期内完全完成。将其增加到一个很大的数字,您可能会看到不同的经过时间。