【发布时间】:2014-09-15 01:10:59
【问题描述】:
我写了一个算法来获得浮点数的总和,这个算法非常适合整数,但是当我应用于浮点数时,我得到的总和是一个负数。但是我的浮点数组确实只有正浮点数。在这里我发布我的代码,感谢您检查它。
static unsigned int do_heap_sum(double ary[], unsigned int n,
double *result)
{
unsigned int j;
int counter=0;
double sum=0;
double min;
while(n>counter){
make_heap(ary,n);
min=ary[0];
sum=sum+min;
for(j=1;j<n;j++){
ary[j-1]=ary[j];
}
counter=counter+1;
}
*result=sum;
//exit(EXIT_FAILURE);
return 0;
}
在这段代码中,我使用 make_heap 来查找最小值。你觉得这有问题吗? (这个 make_heap 与提取数组最小值的整数完美配合)。 再次感谢。
【问题讨论】:
-
make_heap()是标准库提供的还是自己实现的? -
make_heap是做什么的?它会修改数组吗?如果不修改数组,是不是每次迭代都要调用它? -
ary[j-1]=ary[j];看来您访问的范围超出了有效范围。 -
数字有多大?你检查过你不是简单地溢出了吗?
-
检查是否正确输出结果。例如,如果您使用 printf/sprintf 您是否将 %i,%d 更改为 %lf ?如果结果真的是负数,那么在 sum 和 step 的 + 操作中添加断点,直到结果变为负数,然后你会看到真正发生了什么
标签: c algorithm floating-point sum