0

我正在尝试使用该gettimeofday()功能对功能进行计时。我能够以微秒为单位获取时间,但是当尝试将其除以 along以获取以秒为单位的时间时,我的值被截断为单个integer. 有没有人对为什么会发生这种情况有任何见解?我曾假设除以 along = 1000000.0会防止这种截断。

功能时序:

struct timeval t1,t2;

gettimeofday(&t1, NULL);

// Computes C - C1 - using single thread
for (i=0; i < n; i++)
    for (j=0; j < p; j++)
    {
        C1[i][j]=0;
        for (k=0; k < m; k++)
            C1[i][j] += A[i][k]*B[k][j];
    }

gettimeofday(&t2, NULL);

此处应用的部门:

long divider = 1000000.0;
long elapsed = ((t2.tv_sec - t1.tv_sec) * 1000000.0L) + (t2.tv_usec - t1.tv_usec);
elapsed = (elapsed/divider);

printf("Time in seconds: %ld seconds\n", elapsed);

任何帮助表示赞赏。

4

2 回答 2

3

Long是一个整数类型,意味着它不会保留小数,您可能想要使用doublefordividerelapsed. 更多信息请访问cplusplus.com

请注意,您还需要%lfprintf

更正:就像%fprintf-format 显然就足够了

于 2013-04-17T16:35:49.447 回答
2

long类型是整数类型。

问题是您正在尝试将您想要成为 a float(或 a double)的结果存储在 a 中long

这里有两个问题:1-您的操作数永远不会转换为float/ double(编译器隐式转换),因此所有中间操作都返回 anint或 a long。2- 你的结果是 a long:即使你的操作数是float/ double,你的结果也会被转换为long

你必须做的:使用double变量。

double divider = 1000000.0;
double elapsed = ((t2.tv_sec - t1.tv_sec) * 1000000.0) + (t2.tv_usec - t1.tv_usec);
elapsed = (elapsed/divider);

printf("Time in seconds: %5.5f seconds\n", elapsed);
于 2013-04-17T16:41:31.953 回答