我已经提炼出一个方程式:
speed = ( ( rear_wheel_speed_a + front_wheel_speed_a ) << 10 ) +
( ( rear_wheel_speed_b + front_wheel_speed_b ) << 2 );
但由于某种原因,我得到了意想不到的结果,所以我一定做错了什么。这开始是这样的:
speed = ((((rear_wheel_speed_a * 256 + rear_wheel_speed_b) / 16) +
((front_wheel_speed_a * 256 + front_wheel_speed_b) / 16)) / 2) * 128;
那是完全不简化的版本。它们不是数学上的等价物吗?
所有值都是带符号的 16 位整数。一个示例数据集是:
rear_wheel_speed_a = 0x03;
rear_wheel_speed_b = 0x6F; //<-- I originally swapped
front_wheel_speed_a = 0x02; //<-- these two values. Sorry!
front_wheel_speed_b = 0xE2;
这归结为 6468 的答案。但在第一个等式中,我的应用程序表现得好像它至少小了 3% 或大了 3%。我这样说是因为这是一个嵌入式应用程序,除了测试它是否在某个“正常”范围内之外,我无法确认计算结果。当我使用第二个方程时,它属于参数,但使用我的“简化”(位移)方程时,它没有,所以我认为我必须错误地进行移位(或者我简化错误但我三重检查了它)。
任何见解表示赞赏,谢谢。