簡體   English   中英

c ++:浮點運算穩定性策略

[英]c++: strategies for stability of floating point arithmetic

任何人都可以推薦任何包含維護各種浮點運算穩定性的策略的C ++庫/例程/包嗎?

示例:假設您希望在單位間隔(0,1)中對一百萬個long double精度的矢量/數組求和,並且每個數字的大小大致相同。 天然求和for (int i=0;i<1000000;++i) sum += array[i]; 是不可靠的 - 對於足夠大的isum將比array[i]具有更大的數量級,因此sum += array[i]將等於sum += 0.00 (注意:此示例的解決方案是二進制求和策略。)

我處理數千/數百萬微小概率的總和和產品。 我使用具有2048位有效數的任意精度庫MPFRC++ ,但同樣的問題仍然適用。

我主要關心的是:

  1. 准確匯總許多數字的策略(例如上面的例子)。
  2. 乘法和除法何時可能不穩定? (如果我想規范化大量數字,我的歸一化常數應該是多少?最小值?最大?中位數?)

二元求和並不能保證准確的結果。 最可靠(盡管速度較慢)的方法是使用Kahan求和 Boost.Accumulators有上面的實現和更多。

乘法和除法穩定性:除非你得到非規范化的浮點數,否則它們不會遇到與求和和減法相同的問題。 事實上,乘法誤差最多為0.5 ulp(單位最后一位)。

......我的歸一化常數應該是多少?

'normalize'是什么意思? 這取決於您使用的規范 可能的候選者:使用數組中的最大絕對值,或任何其他廣義均值。 (您列出的其他選項不起作用,因為即使非零數組也可能為零。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM