我正在努力解决因不足或溢出而失败的求和问题。
我有超过 8271571 个双精度值,我需要算术平均值。
但主要问题是,我似乎不够聪明,无法做到这一点。
目前我只是将它们总结并除以大小。这在大多数情况下都会失败或溢出,给我 -1.#INF 或 1.#INF。
for(size_t j = 0; j < 12; j++)
{
double a = 0.0;
for(size_t i=0; i < Features->size(); i++)
{
a += Features->at(i)->at(j);
}
meanVector[j] = a / Features->size();
}
然而,不可能说它只是正值或负值,所以我不能设置要签名的数据类型。
当我将它们相加时,我还尝试在求和中使用除法常数或除以大小,但这也无济于事。
值的范围可能从我快速查看的范围,从 -20 到 +30,但不能肯定地说。
所以也许任何人都可以给我一个关于如何做数学或使用解决方法的提示。这一定可以,但我只是缺乏想法。
编辑:
大小从不为0,在分区前进行检查。此外,没有任何值以任何方式无效。在提取它们时,我已经检查了#IND 和 NaN。
如果我已经在总和上除,我想这也不是正确的结果?
a+= Features->at(i)->at(j) / Features->size()
结果 -3.7964983860343639e+305
但对于每次迭代。这不可能是正确的,看起来像一个边界
编辑2:
所以你们中的一些人是完全正确的。有很多垃圾sh * t发生..
0:大小:8327571,最小值:-2.24712e+307,最大值:3362.12 1:大小:8327571,最小值:-2.24712e+307,最大值:142181 2:大小:8327571,最小值:-2.24712e+307,最大值: 59537.8 3:尺寸:8327571,最小:-2.24712e+307,最大:236815 4:尺寸:8327571,最小:-2.24712e+307,最大:353488 5:尺寸:8327571,最小:-2.24712e+307,最大: 139960 6: 大小: 8327571, min: 0, max: 0 7: size: 8327571, min: 0, max: 0 8: size: 8327571, min: 0, max: 0 9: size: 8327571, min: 0 ,最大值:0 10:大小:8327571,最小值:0,最大值:0 11:大小:8327571,最小值:0,最大值:0