任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的 C++ 库/例程/包吗?
示例:假设您想long double
在单位间隔 (0,1) 中对一百万的向量/数组求和,并且每个数字的数量级大致相同。天真求和for (int i=0;i<1000000;++i) sum += array[i];
是不可靠的 - 因为足够大i
,sum
将比 大得多的数量级array[i]
,因此sum += array[i]
相当于sum += 0.00
. (注意:此示例的解决方案是二进制求和策略。)
我处理数千/数百万个微小概率的总和和乘积。我正在使用MPFRC++
具有 2048 位有效位的任意精度库,但同样的问题仍然适用。
我主要关心的是:
- 精确求和许多数字的策略(例如上面的示例)。
- 什么时候乘法和除法可能不稳定?(如果我想对大量数字进行归一化,我的归一化常数应该是多少?最小值?最大值?中位数?)