mar*_*trz 5 c++ floating-point
假设我们有很多双打,例如N == 1000000。
array<double, N> arr;
Run Code Online (Sandbox Code Playgroud)
有两种幼稚的方法来计算平均值。第一
double result = 0;
for (double x : arr) {
result += x;
}
result /= arr.size();
Run Code Online (Sandbox Code Playgroud)
当值的总和很大时,这可能是不准确的。浮点数然后失去精度。
另一种方法是:
double result = 0;
for (double x : arr) {
result += x / arr.size();
}
Run Code Online (Sandbox Code Playgroud)
当数字较小时,这可能会失去精度。
是否有任何故障安全方法来计算浮点数的简单平均值?赞赏仅使用标准库的解决方案。