2014-10-10 63 views
-2

我有問題需要幫助關於C++功能的第一個電話

平滑指數平滑後的一個輸入表現不同遵循如下等式:

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

我的函數應該只有一個輸入參數,那就是inputSignal參數(smoothFactor可以在函數內聲明並且不是問題的主題)和一個輸出參數,即newValue

現在我遇到的問題是,第一次計算缺少oldValue,因爲在第一次函數調用中oldValue是前面的newValue

所以oldValue必須等於第一個函數調用中的第一個inputSignal

這意味着我的函數在第一次調用時需要表現不同於以後的每次調用。如果我聲明全局參數i=0並在第一次調用後計數爲i++,則可以解決此問題。然而,這不是一個獨立於外部環境的功能,它應該是。

我能夠解決i=0i++全局變量的問題,但沒有找到解決方法。

+1

較大的代碼示例將在這裏幫助 – Niall 2014-10-10 07:06:50

+0

變成一個實用工具類。你的函數有內部狀態(oldValue,可能是本地靜態?),這通常是一個壞主意。然後,您可以在班級中增加一個額外的布爾成員來檢測第一個電話。此外,只需返回newValue而不是將其作爲輸出參數。 – heinrichj 2014-10-10 07:15:32

回答

3

您可以在函數中使用本地靜態變量(參見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; 
}