2014-10-10 94 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; 
}