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

Why List<float>.Sum() and manual sum of numbers gives different result in 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;
    }

为什么这两种 'different' 方法的结果不同?

对于长度为911380个元素的数组结果=620246lSum=620235.8

List.Sum 的内部实现是什么?哪个答案是正确的?是 C# language/library 的问题还是取决于 Windows 中 + 的实现?

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

Sum extension method使用一个double来累加结果,只转换到float到return,所以它比使用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;
}