float
ist gut, ein C ++ - Gleitkomma. FFloat32
ist eine Struktur, die einen Float sowie (über eine Vereinigung) die zerlegten Bitfelder für die Vorzeichen-, Mantissen- und Exponententeile dieses Floats darstellt.
Sie sollten im Allgemeinen nie verwenden, FFloat32
außer wenn:
- Sie verwenden eine API, die ein erwartet
FFloat32
(diese sind sehr selten) oder
- Sie müssen eine Art Low-Level-Bit-Hackery mit einem Fließkomma-Wert ausführen (heutzutage auch ziemlich selten).
Es ist nicht das FFloat32
ist schlecht , per se, es ist nur , dass sie nicht wirklich bieten Ihnen alles , was Sie für allgemeine Zwecke bräuchten Punkt Nutzung schweben.
Es ist weniger verbreitet als ein einfaches altes Gerät float
, das geringfügige Auswirkungen auf die Lesbarkeit hat (andere wissen möglicherweise nicht sofort, wofür es gedacht ist). Es wird auch nicht implizit in konvertiert, float
sodass Sie something.FloatValue
viel tippen, was ebenfalls keine große Sache ist, aber langweilig werden kann.
Schließlich ist die Verwendung von Gewerkschaften und Bitfeldern nicht portierbar und von der Implementierung abhängig (siehe unten). Dies ist nicht Ihr Problem. Es ist Aufgabe von Epic, sicherzustellen, dass der Typ so strukturiert ist, dass er für alle unterstützten Implementierungen verwendet werden kann. Es kann jedoch zu Fehlern kommen, wenn bei einem neuen Compiler kein Problem mit der Implementierung des Typs festgestellt wird Version wird freigegeben oder zur Liste der unterstützten Compiler hinzugefügt.
Wenn Sie also nicht mit den einzelnen Bits in der Gleitkommadarstellung spielen müssen, sollten Sie dies wahrscheinlich vermeiden FFloat32
(sein Cousin FFloat16
, könnte etwas nützlicher sein, da es keinen Standard-16-Bit-C ++ - Gleitkommatyp gibt).
Früher war es üblich, Floats über ganzzahlige Darstellungen ihrer Komponenten für " Geschwindigkeit " zu manipulieren . Moderne Computer machen viele Plattformen überflüssig, und die verschiedenen Typ-Punning- Techniken, die verwendet werden könnten, um solche Dinge zu tun, können in jedem Fall die Leistung oder Korrektheit beeinträchtigen.
Es sollte aufschlussreich sein, dass eine Suche im GitHub-Repository von Unreal nur sehr wenige Verwendungen des FFloat32
Typs aufdeckt . Alle von ihnen sind in der Definition von sich FFloat32
selbst oder in der Definition von FFloat16
.
Tut speziell FFloat32
zwei Dinge, die der C ++ - Standard aufruft. Es:
- Sie können so tun, als ob mehrere Gewerkschaftsmitglieder gleichzeitig aktiv wären. Es wird erwartet, dass Sie in die Gleitkomma-Member schreiben und von einem der Integer-Member lesen (9.5.1, [class.union])
- erwartet, dass die Bitfeldzuordnung innerhalb der Vereinigung mit der der Bitzuordnung eines IEEE-Gleitkommawerts übereinstimmt; Die Zuweisung und Ausrichtung von Bitfeldelementen innerhalb eines Klassentyps ist jedoch implementierungsdefiniert (9.6.1, [class.bit]).
FFloat32
.