4

uint8_t および uint16_t 変数タイプを作成し、いくつかのレジスターからそれらに値を読み取りました。しかし、これらを float に簡単にキャストできるかどうか、および変換が数値的に意味があるかどうかはわかりません。

uint8_t と uint16_t を float にキャストする最適な方法は何ですか?

4

2 に答える 2

12

キャストする必要はありません。整数型は暗黙的に浮動小数点型に変換できます。

uint8_t u8 = something;
uint16_t u16 = whatever;

float f1 = u8;
float f2 = u16;

8 ビットおよび 16 ビットの整数値は、正確に表す必要があります。より大きな型は、一部の精度を失う可能性があります。

于 2014-09-10T14:15:39.893 に答える
1

シーモアの回答とバトシェバのコメントは良いですが、私は最近C++ 11のケースに見舞われたので、変換の使用に役立つか、まったく無関係である可能性のある別の回答を試します.

integer から float への変換には、多くのサイクルがかかる場合があります。

したがって、変換したい値が実際の値の限られた数であるか、リテラルであるか、コンパイラが定数であると判断できる場合は、(実行時に) より高速な方法があります。

constexpr float ToFloatAtCompileTime(uint8_t u8) {
    return u8; // implicit conversion to return type
}

float f1 = ToFloatAtCompileTime(u8);

注: コンパイラは、より高い最適化レベルでこれを暗黙的に行う場合があります。

于 2014-09-10T14:56:49.310 に答える