首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当存在明显差异时,difftime返回0

当存在明显差异时,difftime返回0
EN

Stack Overflow用户
提问于 2010-10-28 17:34:55
回答 5查看 6.6K关注 0票数 4

我有以下C99程序,它测量与加法相关的简单除法运算的性能。但是,difftime函数仍然返回0,即使程序处理runAdditionrunDivision ( iterations设置为10亿)显然需要几秒钟时间。

代码语言:javascript
复制
#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));
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-28 17:45:47

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

在堆栈上推送参数以调用printf时,您会推送一个使用8字节的long long,也会推送一个使用8字节的double。当函数printf读取格式字符串时,它首先需要4个字节的int,8个字节的double。因为您是小端的,所以printf正确地获取了int,并且long long的前四个字节足以表示该值。然后,printf获取double,然后获取long long的最后四个字节,然后是double的前四个字节。由于long long的最后四个字节是零,所以printf认为双精度是以值为零的四个字节开始的,根据双精度的二进制表示,导致double的值非常非常小。

票数 7
EN

Stack Overflow用户

发布于 2010-10-28 17:48:57

尝试在printf中使用%lld代替%d

代码语言:javascript
复制
printf("%lld additions t
         ^^^
票数 2
EN

Stack Overflow用户

发布于 2010-10-28 17:42:32

将temp设为volatile,这样它就不会被优化。编译器可能会将其视为一个没有副作用的节/函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4041541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档