【发布时间】:2018-06-14 21:30:55
【问题描述】:
我有两个工作要做:
- 我需要在内存中存储两个传感器值(使用 FPU)
- 然后在没有 FPU 的情况下计算这两个值的乘积。
我的传感器是:
- 传感器 1 给出的值介于 0 到 40 之间,分辨率为 0.2
- 传感器 2 给出的值介于 -10 和 10 之间,分辨率为 0.1
为了以有效的方式存储数据,我使用偏移量和比例因子将值转换为整数
uint8 uint_value = (floating_value - offset) / resolution;
样本数据: 传感器 1:
Real World Value 0.0 -> uint_value = 0
Real World Value 20.2 -> uint_value = 101
传感器 2:
Real World Value -10.0 -> uint_value = 0
Real World Value 0.5 -> uint_value = 105
现在我在执行第二个任务时遇到了一些问题。我需要在不使用浮点运算的情况下计算这两个值的乘积。
我该怎么做?我看过定点数,它提供了通过整数乘法和移位进行乘法的可能性。 但我似乎无法弄清楚如何将我的缩放值转换为定点数。
【问题讨论】:
-
请提供一些示例数据 - 转换存储之前和之后的数据。
-
除此之外,第一步,我会用
value = lround((floating_value - offset) / resolution);“四舍五入”当然uint8对于“-10到30之间的值,分辨率为0.1”不太好。试试int16_t。
标签: c fixed-point