为什么 List<float>.Sum() 和手动数字求和在 C# 中给出不同的结果?
Why List<float>.Sum() and manual sum of numbers gives different result in C#?
在 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;
}
为什么这两种 'different' 方法的结果不同?
对于长度为911380个元素的数组结果=620246和lSum=620235.8
List.Sum 的内部实现是什么?哪个答案是正确的?是 C# language/library 的问题还是取决于 Windows 中 + 的实现?
我们研究人脑和心脏activity,我们需要正确的结果,所以我很感激任何帮助!非常感谢。
Sum
extension method使用一个double
来累加结果,只转换到float
到return,所以它比使用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;
}
在 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;
}
为什么这两种 'different' 方法的结果不同?
对于长度为911380个元素的数组结果=620246和lSum=620235.8
List.Sum 的内部实现是什么?哪个答案是正确的?是 C# language/library 的问题还是取决于 Windows 中 + 的实现?
我们研究人脑和心脏activity,我们需要正确的结果,所以我很感激任何帮助!非常感谢。
Sum
extension method使用一个double
来累加结果,只转换到float
到return,所以它比使用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;
}