文章目录
1 KahanSummation算法
KahanSummation算法是为了解决大量数据累加中,解决浮点数精度带来的“大数吃小数”问题。
算法的核心思想就是:每次计算完后我们都把损失的精度计算出来,然后下次累加的时候再加进去。
算法实现代码如下:
// KahanSummation算法
public static void main(String[] args)
{
float total_sum = 0;
float delta = 0;
for (int i=0; i<20000000; i++)
{
float add_num = 1.0f; // 需要加进去的数字
float total_num = add_num - delta; // 当前加进去的数字和上次计算的误差之和(这里的delta必定是负值)
float tmp = total_sum + total_num;
delta = tmp - total_sum - total_num; // 计算丢失的精度
total_sum = tmp;
}
Console.WriteLine(total_sum);
}
参考资料: