gpt4 book ai didi

math - 用于整数或定点数学的 lerp

转载 作者:行者123 更新时间:2023-12-02 21:09:51 31 4
gpt4 key购买 nike

有没有一种优雅的方法可以使用整数进行线性插值? (为了平均微 Controller 中的 ADC 测量值,ADC 测量值是 12 位,微 Controller 可以很好地处理 32 位整数)。系数f在[0, 1]范围内。

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

最佳答案

好吧,既然你有这么多额外的整数位可以备用,那么使用 int 的解决方案是:

为您的参数 F 使用一个整数,F 从 0 到 1024 而不是从 0 到 1 的 float 。然后您可以这样做:

(A*(1024-F) + B * F) >> 10

没有溢出的风险。

事实上,如果您的参数需要更高的分辨率,您可以选择 F 的最大值作为 2 的任意幂,直到 2**19(如果您使用的是无符号整数;2**18 否则)。

这在舍入方面做得不好(而是截断),但它仅使用整数运算,并通过使用移位运算符避免了除法。它仍然需要整数乘法,许多 MCU 没有硬件,但希望它不会太糟糕。

关于math - 用于整数或定点数学的 lerp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098800/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com