加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:29:41 所属栏目:百科 来源:网络整理
导读:任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的C库/例程/程序包? 示例:假设您想在单位间隔(0,1)中的一个100万双倍的向量/数组中求和,并且每个数字大致相同的数量级. (int i = 0; i 1000000; i)sum = array [i];是不可靠的 - 对于足够大的i,sum将
任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的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.可能的候选人:使用数组中的最大绝对值,或任何其他广义均值. (您列出的其他选项不起作用,因为即使对于非零数组也可能为零).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读