为什么列出<;浮动>;.Sum()和手工求和在C#中给出了不同的结果

本文关键字:结果 求和 gt 浮动 lt Sum 为什么 | 更新日期: 2023-09-27 18:20:47

在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元素的数组结果=620246lSum=620 235.8

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

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

为什么列出<;浮动>;.Sum()和手工求和在C#中给出了不同的结果

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