概述
Kahan求和公式原理:
首先,这个算法就是用来求和的,求a1+a2+a3+...为什么不直接相加呢,而要用Kahan求和公式呢,这个算法的用武之地在哪呢,一一道来
kahan求和算法能避免大数吃小数的情况。
大数吃小数是什么意思呢?举个例子,我们用两个float相加,float是32位,它的精度是小数点后6-7位(详见http://blog.csdn.net/zhangpinghao/article/details/8138732),设有a=123456;b=2.189;a+b应该是123458.189但是由于float的精度只有小数点后6-7位,所以必然得不到123458.189,后面的89可能会截掉,8不一定,9是必然会截掉的。好的,才做一个加法就产生至少了0.009的误差,做1000个这样的加法,误差就是9了,这显然不是我们想要的。
kahan求和算法可以避免这种情况,它有一个数用来记住那个被截断的小数,同样做下面的计算,设有a=123456;b=2.189;计算a+b。kahan求和算法是这样做的:sum=a+b(不准确); temp= (a+b)-a-b;temp等于多少呢,初看这不就是0吗?不是的,计算机此时算的可不是0,而是等于-0.009,就是被截断的那个小数。通过一个临时变量我们就记住了这个误
最后
以上就是冷静抽屉为你收集整理的Kahan‘s Summation Formula原理—它是如何避免大数吃小数的的全部内容,希望文章能够帮你解决Kahan‘s Summation Formula原理—它是如何避免大数吃小数的所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复