加法的十进制顺序会影响结果

Bra*_*AGr 5 c# math decimal

我有一个使用小数执行大量计算的系统,偶尔会添加相同的数字,但返回不同的结果,+/ - 0.000000000000000000000000001

这是一个简短的例子:

decimal a = 2.016879990455473621256359079m;
decimal b = 0.8401819425625631128956517177m;
decimal c = 0.4507062854741283043456903406m;
decimal d = 6.7922317815078349615022988627m;

decimal result1 = a + b + c + d;
decimal result2 = a + d + c + b;

Console.WriteLine((result1 == result2) ? "Same" : "DIFFERENT");
Console.WriteLine(result1);
Console.WriteLine(result2);
Run Code Online (Sandbox Code Playgroud)

那输出:

DIFFERENT
10.100000000000000000000000000
10.100000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

差异很小,没有实际效果,但有人见过这样的事情吗?我期望在添加相同的数字时,您将始终获得相同的结果.

Gre*_*ill 8

数值分析的整个领域致力于研究这些影响以及如何避免它们.

要在汇总浮点数列表时产生最佳结果,首先将列表从最小值排序到最大值,然后按顺序添加它们.