为什么列出<;浮动>;.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元素的数组结果=620246和lSum=620 235.8
List.Sum的内部实现是什么?哪个答案是正确的?这是C#语言/库的问题,还是取决于+在Windows中的实现?
我们研究人类的大脑和心脏活动,我们需要正确的结果,所以我感谢任何帮助!提前非常感谢。
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;
}