【发布时间】:2015-07-29 17:49:01
【问题描述】:
以下代码取自Arduino tutorial on smoothing:
int smooth(int data, float filterVal, float smoothedVal) {
if (filterVal > 1) {
filterVal = .99;
}
else if (filterVal <= 0) {
filterVal = 0;
}
smoothedVal = (data * (1 - filterVal)) + (smoothedVal * filterVal);
return (int)smoothedVal;
}
以下语句来自同一个教程,让我思考:
如果您需要更快的速度或想要避免浮点数,可以使用全整数数学轻松重写此函数。
事实是我确实想避免浮点数并提高速度,但我想知道:如何将其转换为整数算术? Bit-banging 解决方案是一种奖励;o)
【问题讨论】:
-
有理数?
-
可能是fixed point math 在您的用例中派上用场。
-
@Aderis 乘以和除以 2 的幂通常更快,因为它可以用移位代替。
-
过滤算法有很多种,针对不同的需求有不同的响应。该函数返回
int所以我想知道它的输入值float smoothedVal来自哪里。 -
@heltonbiker 嗯,不仅仅是链接的答案。我在我的平板电脑上,编写包含大量代码的答案很困难。让我们看看,也许我明天可以对文章中描述的内容进行简要汇编。你也可以自己写一个,没关系。
标签: c++ c arduino integer bit-manipulation