gpt4 book ai didi

c - difftime 在明显不同时返回 0

转载 作者:太空狗 更新时间:2023-10-29 15:18:41 24 4
gpt4 key购买 nike

我有以下 C99 程序,它测量相对于加法的简单除法运算的性能。然而,difftime 函数一直返回 0,即使程序显然需要几秒钟的时间来处理 runAdditionrunDivision with iterations 设置为 10 亿。

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

void runAddition(long long iterations)
{
long long temp;
for (long long i = 1; i <= iterations; i++)
{
temp = temp + i;
}
}

void runDivision(long long iterations)
{
long long temp;

// Start at 1 to avoid division by 0!
for (long long i = 1; i <= iterations; i++)
{
temp = temp / i;
}
}

int main()
{
long long iterations = 1000000000;
time_t startTime;

printf("How many iterations would you like to run of each operation? ");
scanf("%d", &iterations);

printf("Running %d additions...\n", iterations);
startTime = time(NULL);
runAddition(iterations);
printf("%d additions took %f seconds\n", iterations, difftime(time(NULL), startTime));

printf("Running %d divisions...\n", iterations);
startTime = time(NULL);
runDivision(iterations);
printf("%d divisions took %f seconds\n", iterations, difftime(time(NULL), startTime));
}

最佳答案

您的格式字符串需要一个 int (%d) 和一个 double (%f)。您的参数是 long longdouble。您应该将第一个格式字符串设置为 %lld

当将参数压入堆栈以调用 printf 时,您压入一个使用 8 个字节的 long long 和一个也使用 8 个字节的 double .当函数 printf 读取格式字符串时,它首先需要 4 个字节的 int,然后是 8 个字节的 doubleprintf 正确获取 int,因为您是小端字节序,并且 long long 的前四个字节足以表示该值。 printf 然后获取 double,它获取 long long 的最后四个字节,然后是 的前四个字节双。由于 long long 的最后四个字节是零,printf 认为是 double 值的四个字节以零值为开始,导致 的值非常非常小code>double 根据double的二进制表示。

关于c - difftime 在明显不同时返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com