我遇到了一个求和失败的问题。避免“简单求和”的双重溢出/溢出
我有超过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 *吨回事..
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,max:353488 5:size:8327571,min: -2.24712e + 307,max:139960 6:size:8327571,min:0,max:0 7:size:8327571,min:0,max:0 8:size:8327571,min:0,max:0 9:size: 8327571,min:0,max:0 10:size:8327571,min:0,max:0 11:size: 8327571,min:0 ,最多:0
你可以总结'number [i]/n' - 但它可能会增加数字错误... – amit
如果所有'Features-> size()'不是'0',你确定吗? (提示:任何浮点数,除以0将给你无穷大 - 如果该数字是非负数 - '1. INF#,如果它是负数 - '-1。#INF') –
@PaulR它是一个错字,对不起。 – Stefan