C 对于具有相同输出和迭代次数的循环,执行时间不同

C 对于具有相同输出和迭代次数的循环,执行时间不同,c,loops,C,Loops,为什么第一圈比第二圈快 对我来说,第二个循环似乎不那么昂贵,因为身体里没有数学表达式可以计算。但对于第二个循环,我仍然在spoi.com()上得到了一个时间限制。然而,第一个循环确实被接受 两个for循环打印相同的有限算术级数。例如: 1 3 5 7 9 11 13 15 鉴于: long long n; // number of members in series ( 8 in above example ) long long d; // constant distance between

为什么第一圈比第二圈快

对我来说,第二个循环似乎不那么昂贵,因为身体里没有数学表达式可以计算。但对于第二个循环,我仍然在spoi.com()上得到了一个时间限制。然而,第一个循环确实被接受

两个for循环打印相同的有限算术级数。例如:

1 3 5 7 9 11 13 15
鉴于:

long long n; // number of members in series ( 8 in above example )
long long d; // constant distance between the members ( 2 in example )
long long start; // first member in series ( 1 )
long long end; // last member in series ( 15 )
第一个循环:

for(long long i = 0; i < n; i++)
        printf("%lld ", start+(i*d));

请正确地进行基准测试,并提供一个完整的信息。看看汇编代码。代码甚至可能是相同的。无论如何,
printf
比任何计算都要花费更多的时间。谁说哪一个更快?你编译过优化的代码吗?在我的计算机上,我编译时没有优化标志。但我不知道spoj.com上的gcc是否使用了它们。
for(long long i = start; i <= end; i+=d) 
        printf("%lld ", i);
#define NUM_MEMBERS 2000000LL
#define DISTANCE 3LL
#define START 1000000LL

int main(int argc, char *argv[])
{
    clock_t begin, finish;
    double time1, time2;

    long long n = NUM_MEMBERS;
    long long d = DISTANCE;
    long long start = START;
    long long end = START+((NUM_MEMBERS-1)*DISTANCE);

    begin = clock();
    for(long long i = 0; i < n; i++)
        printf("%lld ", start+(i*d));
    finish = clock();
    time1 = (double)(finish-begin) / CLOCKS_PER_SEC;

    begin = clock();
    for(long long i = start; i <= end; i+=d)
        printf("%lld ", i);
    finish = clock();
    time2 = (double)(finish-begin) / CLOCKS_PER_SEC;

    printf("\ntime1: %g\ntime2: %g\n", time1, time2);

    return 0;
}