我需要有关C ++指数平滑问题的帮助
平滑遵循以下等式:
newValue = inputSignal*smoothFactor + (1-smoothFactor)*oldValue
我的函数应该只有一个输入参数,即inputSignal
参数(smoothFactor
可以在函数内声明并且不是问题的主题)和一个输出参数,即是newValue
。
现在我遇到的问题是FIRST计算缺少oldValue
,因为oldValue
是第一个函数调用中的前一个newValue
。
因此oldValue
必须等于第一个函数调用中的第一个inputSignal
。
这意味着我的函数在第一次调用时需要表现出与后续每次调用不同的行为。如果我在第一次调用后声明全局i=0
参数并计算i++
,我就可以解决此问题。然而,这不是一个独立于外部环境的功能,它应该是。
我能够使用i=0
和i++
全局变量解决问题,但没有找到解决方案。
答案 0 :(得分:3)
您可以在函数中使用局部静态变量(cf this question)。在第一次调用方法时,局部静态变量被初始化一次。所以你可以用这个:
double smooth(double inputSignal) {
static double oldValue = inputSignal; // Executed only once on first invocation
double newValue = inputSignal*smoothFactor + (1-smoothFactor)*oldValue;
oldValue = newValue; // Store it for next invocation
return newValue;
}