一尘不染

浮点线性插值

algorithm

为了在两个变量之间进行线性插值ab给出分数f,我目前正在使用以下代码:

float lerp(float a, float b, float f) 
{
    return (a * (1.0 - f)) + (b * f);
}

我认为可能有一种更有效的方法。我使用的是不带FPU的微控制器,因此浮点运算是在软件中完成的。它们的速度相当快,但相加或相乘仍需要100个周期。

有什么建议?

为了使上面代码中的方程清晰,nb可以省略指定1.0为显式浮点文字。


阅读 234

收藏
2020-07-28

共1个答案

一尘不染

忽略精度差异,该表达式等效于

float lerp(float a, float b, float f)
{
    return a + f * (b - a);
}

那是2个加法/减法和1个乘法,而不是2个加法/减法和2个乘法。

2020-07-28