float
, iyi, bir C ++ kayan nokta. FFloat32
bir şamandıranın yanı sıra (bir birlik aracılığıyla) o şamandıranın işareti, mantis ve üs parçaları için ayrıştırılmış bit alanlarını temsil eden bir yapıdır.
Aşağıdaki durumlar dışında genellikle asla kullanmamalısınız FFloat32
:
- bir API bekleyen
FFloat32
(bunlar çok nadirdir) ya da
- kayan nokta değerine sahip bir tür düşük seviyeli bit hackery yapmanız gerekir (bu günlerde oldukça nadirdir)
Öyle değil FFloat32
ise kötü o gerçekten size noktası kullanımını kayan genel amaçlı gerekiyordu şey sunmuyor bu sadece var, haddi zatında.
Eski bir ovadan daha az yaygındır float
Bazı küçük okunabilirlik etkisine sahip olan (diğerleri bir bakışta ne için olduğunu hemen bilmeyebilir). Ayrıca örtük olarakfloat
bu yüzden something.FloatValue
çok fazla yazacaksınız, bu da büyük bir anlaşma değil, ama sıkıcı olabilir.
Son olarak, sendikaları ve bit alanlarını kullanımı taşınabilir değildir ve uygulama tanımlıdır (aşağıya bakınız). Bu değil senin probleminiz , türün tüm desteklenen uygulamalar için kullanılabilir olacak şekilde yapılandırıldığından emin olmak Epic'in işi, ancak yeni bir derleyici olduğunda türün uygulanmasında bir sorun yakalayamazlarsa potansiyel bir hata kaynağıdır. sürümü yayınlandı veya desteklenen derleyiciler listesine eklendi.
Bu nedenle, kayan nokta gösteriminde ayrı bitlerle oynamaya ihtiyacınız yoksa, muhtemelen kaçınmalısınız FFloat32
(kuzeni, FFloat16
standart 16 bit C ++ kayan nokta tipi olmadığı için biraz daha fazla faydaya sahip olabilir).
Eskiden bileşenlerini " hız " için tamsayı temsili yoluyla manipüle etmek yaygındı . Modern bilgisayarlar, birçok platform için bu ihtiyacının çoğunu ortadan kaldırır ve bu tür şeyleri yapmak için kullanılabilecek çeşitli tipte kurnaz teknikler, herhangi bir olayda performans veya doğruluk için zararlı olabilir.
Unreal'ın GitHub deposunda yapılan bir aramanın FFloat32
türün çok az kullanımını ortaya çıkardığını söylemek gerekir . Hepsi, FFloat32
kendi ya da tanımındadır FFloat16
.
özellikle, FFloat32
C ++ standardının söylediği iki şey yapar. O:
- sendikanın birden fazla üyesi aynı anda aktifmiş gibi davranmanıza izin verir; kayan nokta üyelerine yazmanız ve tamsayı üyelerinden birinden okumanız beklenir (9.5.1, [class.union])
- birleşim içindeki bitfield tahsisinin bir IEEE kayan nokta değerinin bit tahsisi ile eşleşmesini bekler; bununla birlikte, bir sınıf tipi içinde bitfield üyelerinin tahsisi ve hizalanması uygulama tanımlıdır (9.6.1, [class.bit])
FFloat32
.