アンダーまたはオーバーフローで失敗する合計の問題に取り組んでいます。
算術平均が必要な double 値が 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:
それで、あなたの何人かは完全に正しかった。たくさんのゴミが起こっています..
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、最小: 0、最大: 0 7: サイズ: 8327571、最小: 0、最大: 0 8: サイズ: 8327571、最小: 0、最大: 0 9: サイズ: 8327571、最小: 0 、最大: 0 10: サイズ: 8327571、最小: 0、最大: 0 11: サイズ: 8327571、最小: 0、最大: 0