1

我需要做一个数学运算,将从传感器接收到的 16 位值转换为真实的相对湿度值。它是用以下公式计算的:

公式 rh=-6+125*(Srh/2^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. 但可能有更有效的方法?

4

1 回答 1

0

您可以通过将右侧写为来避免较大的中间项

-6 + (128 - 4 + 1) * S / 65536

变成

-6 + S / 512 - S / 16384 + S / 65536

您可能可以删除最后一项,也可能是倒数第二项,具体取决于您希望基点截断的精确程度。

于 2018-05-10T10:04:40.777 回答