相关疑难解决方法(0)

小双数的总和c ++

假设我们10^(-15)有一个小(大约)双数的数组.例如,如果我们按顺序计算此数组中的数字总和

double sum = 0;
for (int i = 0; i < n; i++) sum+=array[i];
Run Code Online (Sandbox Code Playgroud)

我们得到一些价值x.

但是如果我们将一个数组分成几个部分,然后计算每个部分的总和,然后我们将所有的部分和加在一起,我们得到一些值x2,这接近x但不完全x.所以我在计算总和方面已经失去了成功.

有人知道如何通过将这些数字划分为某些部分而不会失去准确性来计算小双数的总和吗?

c++ double numbers sum

12
推荐指数
1
解决办法
8262
查看次数

浮点值的数值稳定运行平均值

使用 32 位浮点值,如果 - 在开始计算时 - 我不知道我将拥有多少个值(在以下示例中,我只是遍历一个向量,那么计算平均值的最佳(数字最准确)方法是什么)我会知道 coult,但让我们假设我最后只知道元素计数)?

我可以做例如

float result = 0.f;
for(float num: numbers) {
    result += num;
}
num /= numbers.size();
Run Code Online (Sandbox Code Playgroud)

但随着结果变大,精度也会变大。对于较小的值,在某些时候result += num;实际上不会再改变结果。

我可以

float result = numbers[0]
for(int i=1, i<numbers.size(); i++) {
    float frac = (i/float(i+1));
    result = result * frac + numbers[i] * (1.0f-frac);
}
Run Code Online (Sandbox Code Playgroud)

但似乎我会应用累积错误来产生这种结果。

有没有更好的方法而不去 64bit double?

floating-point numerical-methods

2
推荐指数
1
解决办法
395
查看次数

标签 统计

c++ ×1

double ×1

floating-point ×1

numbers ×1

numerical-methods ×1

sum ×1