计算C中的平均每秒

时间:2012-12-06 10:17:56

标签: c math timer

我有一个递增的整数值,想要找到该整数的每秒平均值。我知道C中不存在定时器,除非你做了一些具体而复杂的事情[我是C新手]有没有更简单的方法呢?优选地,当进行计算时,该值将被重置,以便在存储器中不具有如此大的数量,因为该应用程序将长时间运行。

2 个答案:

答案 0 :(得分:5)

我认为你会想要包含time.h,并使用它的一些功能和结构(这实际上并不是学习C语言基础知识的坏方法)。有一个解释和一些例子here

如果您需要亚秒级精度,我建议您使用clock_gettime(),这将为您提供纳秒分辨率。

以下是一个例子:

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

struct timespec diff(struct timespec start, struct timespec end);

int main()
{
    struct timespec time1, time2, timeDiff;
    int temp, i;

    // Get the start time
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);

    // Do some work
    for (i = 0; i< 242000000; i++)
        temp+=temp;

    // Get the end time
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);

    // Calculate the difference
    timeDiff = diff(time1,time2);

    printf("%d.%d\n", timeDiff.tv_sec, timeDiff.tv_nsec);
    return 0;
}

struct timespec diff(struct timespec start, struct timespec end)
{
    struct timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

您需要使用以下内容进行编译:

gcc -o timetest timetest.c -lrt

命令的-lrt部分告诉C链接器链接到实时库,其中包含clock_gettime()的定义。

答案 1 :(得分:3)

您只需使用gettimeofday()即可获得时间价值。您需要存储一个这样的读数,以便您可以将最近的读数与旧读数进行比较,并计算它们之间的时间。如果在几秒钟内完成此操作,则可以按整个时间间隔划分整数,并获得每秒的平均值。