さまざまな浮動小数点演算の安定性を維持するための戦略を含む C++ ライブラリ/ルーチン/パッケージを推奨できますか?
例: 単位間隔 (0,1) で 100 万のベクトル/配列を合計したいとlong double
します。各数値はほぼ同じ桁数です。単純な合計for (int i=0;i<1000000;++i) sum += array[i];
は信頼できません。十分i
に大きい場合、sum
は よりもはるかに大きな桁になるarray[i]
ため、 とsum += array[i]
同等になりsum += 0.00
ます。(注: この例の解決策は、2 値合計法です。)
私は、数千/数百万の微小確率の和と積を扱います。MPFRC++
有効桁数が 2048 ビットの任意精度ライブラリを使用していますが、同じ懸念事項が依然として当てはまります。
私は主に次のことに関心があります。
- 多くの数値を正確に合計するための戦略 (上記の例など)。
- 乗算と除算が不安定になる可能性があるのはいつですか? (多数の数値配列を正規化する場合、正規化定数はどうすればよいですか?最小値?最大値?中央値?)