Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长截除法-C_C_Timing_Division_Truncation - Fatal编程技术网

长截除法-C

长截除法-C,c,timing,division,truncation,C,Timing,Division,Truncation,我正在尝试使用gettimeofday()函数对函数计时。我能够以微秒为单位获取时间,但当试图将其除以长以秒为单位获取时间时,我的值被截断为单个整数。有人知道为什么会发生这种情况吗?我假设除以along=1000000.0可以防止这种截断 功能时间: struct timeval t1,t2; gettimeofday(&t1, NULL); // Computes C - C1 - using single thread for (i=0; i < n; i++) f

我正在尝试使用
gettimeofday()
函数对函数计时。我能够以微秒为单位获取时间,但当试图将其除以
以秒为单位获取时间时,我的值被截断为单个
整数
。有人知道为什么会发生这种情况吗?我假设除以a
long=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
是一种整数类型,意味着它不包含小数,您可能希望对
除法器
经过的
使用
double
。更多有关

请注意,还需要将
%lf
设置为该值


更正:只需
%f
,因为printf格式显然是

长的
是一种整数类型,这意味着它不包含小数,您可能希望对
除法器
经过的
使用
双精度
。更多有关

请注意,还需要将
%lf
设置为该值


更正:只需
%f
,因为printf格式显然是

长类型是整数类型

问题是,您试图将一个结果存储在一个
中,该结果希望是一个
浮点值
(或
双精度

这里有两个问题: 1-您的操作数永远不会转换为
浮点
/
双精度
(由编译器隐式转换),因此所有中间操作都会返回
int
long
。 2-结果是长的:即使操作数是浮点的,结果也会被转换为长的

必须做的事情:使用
双变量

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);

long
类型是整数类型

问题是,您试图将一个结果存储在一个
中,该结果希望是一个
浮点值
(或
双精度

这里有两个问题: 1-您的操作数永远不会转换为
浮点
/
双精度
(由编译器隐式转换),因此所有中间操作都会返回
int
long
。 2-结果是长的:即使操作数是浮点的,结果也会被转换为长的

必须做的事情:使用
双变量

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);

你为什么不用双人床?long是一种整数类型。你知道
long
是一种整数类型,是吗?啊,抱歉。我已经使用double对它进行了测试,但是我没有修改printf的格式代码。谢谢你的帮助。你为什么不用双人床?long是一种整数类型。你知道
long
是一种整数类型,是吗?啊,抱歉。我已经使用double对它进行了测试,但是我没有修改printf的格式代码。谢谢你的帮助。