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

发布时间:2020-01-06 发布网站:大佬教程
大佬教程收集整理的这篇文章主要介绍了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(最后单位).

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

大佬总结

以上是大佬教程为你收集整理的c:浮点运算的稳定性策略全部内容,希望文章能够帮你解决c:浮点运算的稳定性策略所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ群:277859234,请注明来意。