如何将表示浮点数的数字和小数部分的两个无符号整数转换为一个浮点数。
我知道有几种方法可以做到这一点,例如将小数部分转换为浮点数并将其相乘以获得小数并将其添加到数字中,但这似乎不是最佳选择。
我正在寻找执行此操作的最佳方法。
/*
* Get Current Temp in Celecius.
*/
void GetTemp(){
int8_t digit = 0; // Digit Part of Temp
uint16_t decimal = 0; // Decimal Part of Temp
// define variable that will hold temperature digit and decimal part
therm_read_temperature(&temperature, &decimal); //Gets the current temp and sets the variables to the value
}
我想获取 Digit 和 Decimal 部分并将它们转换为浮点类型,使其看起来像 digit.decimal 。
它最终可能看起来像这样,但我想找到最优化的解决方案。
/*
* Get Current Temp in Celecius.
*/
float GetTemp(){
int8_t digit = 0; // Digit Part of Temp
uint16_t decimal = 0; // Decimal Part of Temp
// define variable that will hold temperature digit and decimal part
therm_read_temperature(&temperature, &decimal); //Gets the current temp and sets the variables to the value
float temp = SomeFunction(digit, decimal); //This could be a expression also.
return temp;
}
////更新/// - 7 月 5 日
我能够获得源代码,而不仅仅是利用库。我在这个GIST DS12B20.c中发布了它。
temperature[0]=therm_read_byte();
temperature[1]=therm_read_byte();
therm_reset();
//Store temperature integer digits and decimal digits
digit=temperature[0]>>4;
digit|=(temperature[1]&0x7)<<4;
//Store decimal digits
decimal=temperature[0]&0xf;
decimal*=THERM_DECIMAL_STEPS_12BIT;
*digit_part = digit;
*decimal_part = decimal;
尽管该函数不会强制我们将单独的部分作为数字和小数返回,但从温度传感器读取似乎需要这样做(除非我遗漏了某些东西并且可以将其作为浮点数检索)。
我认为最初的问题仍然是使用这两个部分将其变为 C 中的浮点数的最佳方法(这是用于 AVR 和 8 位微处理器,使优化关键)或能够直接检索它作为一个浮子。