gpt4 book ai didi

algorithm - 使用简单移动平均线避免可能的精度损失

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:47:14 29 4
gpt4 key购买 nike

假设我们有一个基本的移动平均函数来跟踪总和。例如:

Queue values;
double sum;

double CalcSMA(double next) {
values.push(next);
sum -= values.pop();
sum += next;
return sum / SMA_LENGTH;
}

如果我们的窗口是 5 宽,我们给它提供类似这样的内容,那么这可能会如何崩溃的一个例子:2, 2, 2, 2, 2, 2, 2, 1E100, 2, 2, 2, 2, 2, 2, 2, 2。输出将是 2, 2, 2, 2E99, 2E99, 2E99, 2E99, 2E99, 0, 0, 0

即使总和没有那么大的偏差,仍然可能存在相当合理的情况,即精度的微小损失可能会使总和人为地增加微小的量。在很长一段时间内,这可能会累积并成为一个问题。

有没有人知道如何解决精度损失问题?

编辑:请注意,此函数设计用于运行 O(1)。那是必要的。因此,每次都重新计算是行不通的:窗口太大。

最佳答案

您可以重新计算每个 SMA_LENGTH 值的新总和以停止错误累积:

Queue values;
double sum = 0.0;
double freshsum = 0.0;
int count = 0;

double CalcSMA(double next) {
values.push(next);
sum -= values.pop();
sum += next;
freshsum += next;
if(++count == SMA_LENGTH)
{
sum = freshsum;
freshsum = 0.0;
count = 0;
}
return sum / SMA_LENGTH;
}

关于algorithm - 使用简单移动平均线避免可能的精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305886/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com