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

时间:2015-11-05 17:15:41

标签: 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;
    }

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

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

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

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

1 个答案:

答案 0 :(得分:5)

Sum extension method使用double累积结果,仅转换为float以返回结果,因此它比使用float更精确:< / p>

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;
}