在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 = 620246和lSum = 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; }