Kahan‘s Summation Formula算法原理详解

一、浮点计算的舍入误差

在cuda的浮点数计算中,float的性能要高于double。32位在累加大量数字的时候,一个非常小的,小数部分的贡献可能会被舍入为零,cuda一般计算的数量都非常的庞大,累计起来,会造成不小的误差。

二、Kahan算法

1、原理

Kahan算法通过引入一个补偿变量c来跟踪由于舍入而丢失的重要的低位信息

2、计算步骤

(1)在每次加法时,首先计算当前数 x 与补偿 c 的差 y,这可以让我们在计算和时尽量减少舍入误差;
(2)然后,将 y 加到当前的总和 sum 中,得到一个临时和 t;
(3)接下来,通过 (t - sum) - y 计算新的补偿 c,这个过程实际上是在恢复丢失的低位部分;(4)最后,将临时和 t 更新到 sum 中。

3、伪代码

function KahanSum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是一个图像

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值