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中 + 的实现?
我们研究人类大脑和心脏活动,我们需要正确的结果,所以我感谢任何帮助!非常感谢。
答案 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;
}