c:浮点运算的稳定性策略

任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的C库/例程/程序包?

示例:假设您想在单位间隔(0,1)中的一个100万双倍的向量/数组中求和,并且每个数字大致相同的数量级. (int i = 0; i <1000000; i)sum = array [i];是不可靠的 - 对于足够大的i,sum将比array [i]大得多的数量级,因此sum = array [i]将等于sum = 0.00.
(注意:此示例的解决方案是二进制求和策略.)

我处理了数千万的微型概率的金额和产品.我正在使用具有2048位有效位数的任意精度库MPFRC,但同样的问题仍然适用.

我主要关心:

>准确求和多个数字的策略(例如上面的例子).
什么时候乘法和除法可能不稳定? (如果我想规范化大量的数字,我的归一化常数应该是多少?最小的值?最大的?中位数?)

解决方法

二进制总和不能保证准确的结果.最可靠(尽管较慢)的方法是使用 Kahan summation. Boost.Accumulators具有以上的实现和更多.

乘法和除法稳定性:除非得到非规范化的浮点数,否则它们不会受到与求和和减法相同的问题的影响.实际上乘法误差最多为0.5 ulp(最后单位).

… what should my normalization constant be?

“正常化”是什么意思?这取决于你使用的norm.可能的候选人:使用数组中的最大绝对值,或任何其他广义均值. (您列出的其他选项不起作用,因为即使对于非零数组也可能为零).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...