uint8_t および uint16_t 変数タイプを作成し、いくつかのレジスターからそれらに値を読み取りました。しかし、これらを float に簡単にキャストできるかどうか、および変換が数値的に意味があるかどうかはわかりません。
uint8_t と uint16_t を float にキャストする最適な方法は何ですか?
uint8_t および uint16_t 変数タイプを作成し、いくつかのレジスターからそれらに値を読み取りました。しかし、これらを float に簡単にキャストできるかどうか、および変換が数値的に意味があるかどうかはわかりません。
uint8_t と uint16_t を float にキャストする最適な方法は何ですか?
キャストする必要はありません。整数型は暗黙的に浮動小数点型に変換できます。
uint8_t u8 = something;
uint16_t u16 = whatever;
float f1 = u8;
float f2 = u16;
8 ビットおよび 16 ビットの整数値は、正確に表す必要があります。より大きな型は、一部の精度を失う可能性があります。
シーモアの回答とバトシェバのコメントは良いですが、私は最近C++ 11のケースに見舞われたので、変換の使用に役立つか、まったく無関係である可能性のある別の回答を試します.
integer から float への変換には、多くのサイクルがかかる場合があります。
したがって、変換したい値が実際の値の限られた数であるか、リテラルであるか、コンパイラが定数であると判断できる場合は、(実行時に) より高速な方法があります。
constexpr float ToFloatAtCompileTime(uint8_t u8) {
return u8; // implicit conversion to return type
}
float f1 = ToFloatAtCompileTime(u8);
注: コンパイラは、より高い最適化レベルでこれを暗黙的に行う場合があります。