长截除法-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()
函数对函数计时。我能够以微秒为单位获取时间,但当试图将其除以长
以秒为单位获取时间时,我的值被截断为单个整数
。有人知道为什么会发生这种情况吗?我假设除以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
是一种整数类型,意味着它不包含小数,您可能希望对除法器
和经过的
使用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的格式代码。谢谢你的帮助。