我需要做一个数学运算,将从传感器接收到的 16 位值转换为真实的相对湿度值。它是用以下公式计算的:
鉴于浮点数学中的这一点,这将是:
uint16_t buf = 0x7C80; // Example
float rh = ((float)buf*125 / 65536)-6;
但我想避免浮点数学,因为我的平台是“FPUless”。
在这里以整数数学计算和存储 RH 的最有效方法是什么?考虑到它的湿度,实际值应该在 0 到 100% 之间,但有时近似值可能会导致 rh 可能略小于 0 或高于 100(如果我要离开那个浮动,我可以做类似的事情if (rh<0) rh=0; else if (rh>100) rh=100;
)而且我只关心小数点后的最后 2 位数字 (%.2f)。
目前我已经解决了这个问题:
int16_t rhint = ((uint32_t)buf*12500 / 65536)-600;
并与rhint / 100; rhint % 100
. 但可能有更有效的方法?