Функция с одним входом ведет себя иначе после первого вызова

Мне нужна помощь с проблемой экспоненциального сглаживания в C ++

Сглаживание следует этому уравнению:

newValue = inputSignal*smoothFactor + (1-smoothFactor)*oldValue

Моя функция должна иметь только один входной параметр, то есть inputSignal параметр ( smoothFactor может быть объявлен внутри функции и не является предметом проблемы) и один выходной параметр, то есть newValue,

Теперь у меня проблема в том, что в ПЕРВОМ расчете отсутствует oldValue, так как oldValue является предшествующим newValue в первом вызове функции.

Итак oldValue должен равняться первому inputSignal в первом вызове функции.

Это означает, что при первом вызове моя функция должна вести себя иначе, чем при каждом последующем вызове. Я могу решить это, если я объявлю глобальный i=0 параметр и подсчитать i++ после первого звонка. Это, однако, не является функцией, независимой от внешних обстоятельств, что и должно быть.

Я смог решить проблему с i=0 а также i++ глобальные переменные, но не могут найти решение без этого.

-2

Решение

Вы можете использовать локальную статическую переменную в функции (см. этот вопрос). Локальные статические переменные инициализируются один раз при первом вызове метода. Таким образом, вы можете использовать это:

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;
}
3

Другие решения


По вопросам рекламы [email protected]