【发布时间】:2014-01-28 17:37:38
【问题描述】:
我使用的是 SDCC 2.8.0,因此内存和代码大小非常有限。假设我有一个介于 0 和 127 之间的输入值,我想将其缩放到 20 - 100。通常我会这样做:
int scale(int input, int min, int max)
{
// assuming max is always greater than min
float range = (float)max - (float)min;
int output = min + int((range / 127.f) * (float)input);
return output;
}
通过调用 scale(64, 20, 100); 我得到 60,正好是 20 到 100 之间的一半。
如何在不使用浮点数的情况下做到这一点?有什么移位魔法吗?
【问题讨论】:
-
你的整数有多大?您期望
max - min的最大值是多少? -
如果可能,请尝试使用更新的 SDCC。最新版本是 3.3.0 和 3.4.0。即将到来。自 2.8.0 以来,SDCC 有了很大改进。
标签: floating-point integer scaling sdcc