float
、まあ、C ++浮動小数点です。FFloat32
は、フロートと、そのフロートの符号、仮数部、および指数部の分解されたビットフィールドを(結合を介して)表す構造です。
通常、次の場合を除いて使用しないでくださいFFloat32
。
- あなたは期待するいくつかのAPIを使用している
FFloat32
(これらは非常にまれである)、または
- 浮動小数点値を使用して何らかの低レベルのビットハッカーを実行する必要があります(最近はかなりまれです)
それFFloat32
は悪いことではありません、それ自体、汎用浮動小数点の使用に必要なものを実際に提供しないというだけです。
単純なoldよりも一般的ではfloat
ありませんが、読みやすさの面で若干の影響があります(他の人は一目でそれが何であるかすぐには分からないかもしれません)。また、暗黙的に変換されfloat
ないためsomething.FloatValue
、大量に入力することになります。これも大したことではありませんが、退屈になる可能性があります。
最後に、共用体とビットフィールドの使用は移植性がなく、実装によって定義されます(以下を参照)。これはあなたの問題ではありません。サポートされているすべての実装で使用できるように型が構造化されていることを確認するのはEpicの仕事ですが、新しいコンパイラーで型の実装の問題をキャッチできない場合、潜在的なバグの原因になりますバージョンがリリースされるか、サポートされているコンパイラのリストに追加されます。
したがって、浮動小数点表現の個々のビットを使用する必要がない限り、おそらく避ける必要がありますFFloat32
(FFloat16
標準の16ビットC ++浮動小数点型が存在しないため、そのいとこ、がわずかに有用である場合があります)。
「speed」のために、コンポーネントの整数表現を介してフロートを操作するのが一般的でした。現代のコンピューターは、多くのプラットフォームの必要性の多くを取り除き、この種のことを行うために使用できるさまざまなタイプパニングのテクニックは、実際にはどんなイベントでもパフォーマンスや正確さを損なう可能性があります。
UnrealのGitHubリポジトリを検索すると、このFFloat32
タイプの使用法がほとんどないことがわかるはずです。それらのすべては FFloat32
それ自身の定義かの定義にありFFloat16
ます。
具体的にFFloat32
は、C ++標準が呼び出す2つのことを行います。それ:
- ユニオンの複数のメンバーが同時にアクティブであるかのように動作できます。浮動小数点メンバーに書き込み、整数メンバーの1つから読み取ることが期待されています(9.5.1、[class.union])
- ユニオン内のビットフィールドの割り当てが、IEEE浮動小数点値のビット割り当ての割り当てと一致することを期待します。ただし、クラス型内のビットフィールドメンバーの割り当てとアライメントは実装定義です(9.6.1、[class.bit])
FFloat32
。