【发布时间】:2013-12-11 19:57:55
【问题描述】:
我想知道为什么我尝试使用多种数据类型(float、double long double 等)得到负值,但结果是..或其负数或零或 NA。这是一个检查商店中客户的中间服务时间的功能,我只发布了问题代码的相关部分。提前提
struct timeval timecount[MAX_COSTUMERS+1][2];
long double getMedium(struct timeval x[][2]){
long double diff;
int i;
for(i=1;i<k.clientID;i++){
diff+= ((x[i][1].tv_usec )*0.0000001 - (x[i][0].tv_usec)*0.0000001) ) ;
}
return diff;
}
void AFUNCTION(){ // Called a bunch of times
k.clientID++;
gettimeofday(&timecount[k.clientID][0], NULL);
// DO A BUNCH OF STUFF
gettimeofday(&timecount[k.clientID][1], NULL);
}
void main ( ) {
long double aux;
aux=getMedia(timecount);
printf("%LG \n",aux);
}
【问题讨论】:
-
对
getMedia的调用应该是getMedium还是不同的函数?diff累加表达式中的括号不匹配,因此这不是真正的代码 - 我们可能正在解决您没有的问题;如果我们能看到真正的代码,就没有! -
字段
tv_usec可能是long。0.0000001肯定是double。所以diff += ...的右边可能只能用double精度数学来完成。然而代码与long double一起累积。考虑0.0000001L以获得统一的精度。