Мне нужно сделать математику для преобразования 16-битного значения, полученного от датчика, в реальное значение относительной влажности.Он рассчитывается по следующей формуле:
Учитывая это в математике с плавающей запятой, которая будет:
uint16_t buf = 0x7C80; // Example
float rh = ((float)buf*125 / 65536)-6;
Но я хочуизбегайте математических вычислений с плавающей точкой, так как моя платформа "FPUless".
Каков наиболее эффективный способ вычисления и сохранения относительной влажности в целочисленной математике?Учитывая, что это влажность, фактическое значение должно быть между 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
.Но, возможно, есть более эффективный способ?