为什么列表<float> .Sum()和手动总和的数字在C#中给出了不同的结果?

在C#中我有以下代码:

public static float sum(List<float> array) { float result = 0.0f; for (int i = 0; i < array.Length; i++) result += array[i]; float lSum = array.Sum(); return result; } 

为什么这两种“不同”方法的结果有所不同?

对于长度为911380元素的数组result = 620246lSum = 620235.8

什么是List.Sum的内部实现和哪个答案是正确的? 是C#语言/库的问题,还是取决于在Windows中执行+

我们研究人类的大脑和心脏活动,我们需要正确的结果,所以我感谢任何帮助! 非常感谢。

Sum扩展方法使用double来累加结果,只有强制转换才能返回,所以比使用float更精确:

 public static float Sum(this IEnumerable<float> source) { if (source == null) throw Error.ArgumentNull("source"); double sum = 0; foreach (float v in source) sum += v; return (float)sum; }