floatの桁と小数部分を表す2つの符号なし整数を1つのfloatに変換するにはどうすればよいですか。
これを行うには、小数コンポーネントを浮動小数点数に変換し、それを乗算して小数を取得して桁に追加するなど、いくつかの方法があることを知っていますが、それは最適ではないようです。
私はこれを行うための最適な方法を探しています。
/*
* 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のようにfloatタイプに変換したいと思います。
最終的にはこのように見えるかもしれませんが、私は最も最適な解決策を見つけたいと思います。
/*
* 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日
ライブラリだけを利用する代わりに、ソースコードを入手することができました。このGISTDS12B20.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;
この関数は、数字と小数として別々の部分を返すことを強制しませんが、温度センサーからの読み取りにはこれが必要なようです(何かが足りず、フロートとして取得できる場合を除く)。
元の質問は、2つの部分を使用してこれをCでフロートにする(これはAVRと8ビットマイクロプロセッサで使用し、最適化キーを作成するためのものです)、または次のように直接取得できるようにするための最適な方法はまだあると思いますフロート。