为了在两个变量之间进行线性插值a并b给出分数f,我目前正在使用以下代码:
a
b
f
float lerp(float a, float b, float f) { return (a * (1.0 - f)) + (b * f); }
我认为可能有一种更有效的方法。我使用的是不带FPU的微控制器,因此浮点运算是在软件中完成的。它们的速度相当快,但相加或相乘仍需要100个周期。
有什么建议?
为了使上面代码中的方程清晰,nb可以省略指定1.0为显式浮点文字。
1.0
忽略精度差异,该表达式等效于
float lerp(float a, float b, float f) { return a + f * (b - a); }
那是2个加法/减法和1个乘法,而不是2个加法/减法和2个乘法。