首页 > 解决方案 > 在 C 中的循环中获取特定代码部分的时序

问题描述

问题描述

下面我有一个程序正在执行两个简单的加法和乘法运算。然后,我将这两个简单操作的总和存储在两个分别称为 total1 和 total2 的变量中。就计算而言,total2 将需要更多时间才能完全执行。我实现代码的方式是,我目前正在计时两个数学运算的整个模拟。

问题

是否可以单独计算 total1 和 total 2 的最终结果?我之所以这样问,是因为我希望以单独的方式获得 total1 和 total2 的具体时间。

任务目的

我完全意识到 long long 在内存方面很昂贵,并且不是节省内存的最有效方法。此代码和问题的唯一目的是计时而不是代码优化。

C代码

#include <stdio.h>
#include <time.h>

int main()
{

     long long total1 = 0, total2 = 0, i = 0;
     double simulation_time = 0;

     clock_t Start = clock();

     do
     {
          total1 += i + i; 
          total2 += i * i * i * i; 

          i++;

     } while (i < 1000000000);

     clock_t End = clock();

     printf("Total 1 = %u \n", total1);
     printf("Total 2 = %u \n", total2);

     simulation_time = (double)(End - Start) / CLOCKS_PER_SEC;
     printf("Runtime of Whole Simulation using clock_t: %f\n", simulation_time);


     return 0;
}

标签: ctimedo-whileclocktime.h

解决方案


我不确定我是否理解您的问题,但是要分别为每个操作计时,您只需制作两个单独的循环。

#include <stdio.h>
#include <time.h>

int main()
{
    long long total1 = 0, total2 = 0, i = 0, j = 1000000000;
    double simulation_time1, simulation_time2;
    clock_t Start, End;

    /* addition */
    Start = clock();
    do
    {
         total1 += i + i;
         i++;
    } while (i < j);
    End = clock();
    simulation_time1 = (double)(End - Start) / CLOCKS_PER_SEC;

    /* multiplication */
    Start = clock();
    do
    {
         total2 += i * i * i * i;
         i++;
    } while (i < j);
    End = clock();
    simulation_time2 = (double)(End - Start) / CLOCKS_PER_SEC;

    printf("Total 1 = %u \n", total1);
    printf("Total 2 = %u \n", total2);
    printf("Runtime of Whole Simulation: %f\n"
        "Runtime of Addition:         %f\n"
        "Runtime of Multiplication:   %f\n",
        simulation_time1 + simulation_time2,
        simulation_time1, simulation_time2);

    return 0;
}

推荐阅读