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

Jia*_*iao 3 c# windows sum shared-libraries

在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;
    }
Run Code Online (Sandbox Code Playgroud)

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

对于长度的数组911380元件导致 = 620246lSum = 620235.8

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

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

Jak*_*rtz 5

Sum扩展方法使用一个double积累的结果,唯一的强制转换成float返回它,所以它比使用更精确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;
}
Run Code Online (Sandbox Code Playgroud)