float
, добре, плаваюча точка C ++. FFloat32
являє собою структуру, яка представляє поплавок, а також (через об'єднання) розкладені бітові поля для знака, мантіси та експонентів цього поплавця.
Як правило, ніколи не використовуйте, FFloat32
за винятком випадків, коли:
- ви використовуєте деякі API, які очікують
FFloat32
(вони дуже рідкісні) або
- вам потрібно зробити якийсь низький рівень біт-хакерів зі значенням плаваючої крапки (також досить рідко в ці дні)
Це не означає, що FFloat32
це погано , по суті, це просто , що це на самому ділі не запропонувати вам все , що ви б необхідно для загального призначення з плаваючою точкою використання.
Він рідше, ніж звичайний старий float
, який має незначний вплив на читабельність (інші можуть не відразу знати, для чого це потрібно). Він також не неявно перетворюється на float
так, що ви будете набирати something.FloatValue
багато, що також не є великою справою, але може стати стомлюючим.
Нарешті, його використання об'єднань та бітполів не є портативним та визначено реалізацією (див. Нижче). Це не ваша проблема, завдання Epic - переконатися, що тип структурований таким чином, що він може бути використаний для всіх підтримуваних реалізацій, але це потенційне джерело помилок, якщо вони не зможуть знайти проблему з реалізацією типу при новому компіляторі версія випускається або додається до списку підтримуваних компіляторів.
Тому, якщо вам не потрібно грати з окремими бітами в поданні з плаваючою точкою, вам, мабуть, просто слід уникати FFloat32
(його двоюрідний брат FFloat16
, може мати трохи більше корисності, оскільки не існує стандартного 16-бітного типу C ++ з плаваючою точкою).
Раніше було маніпулювати поплавцями за допомогою цілих уявлень їх компонентів для " швидкості ". Сучасні комп’ютери позбавляють значної частини необхідності для багатьох платформ і різних методи штампування , які можна було б використовувати для подібних речей, насправді можуть завдавати шкоди для продуктивності чи коректності в будь-якому випадку.
Слід сказати, що пошук у сховищі GitHub Unreal виявляє дуже мало FFloat32
типів використання. Усі вони є у визначенні FFloat32
себе або у визначенніFFloat16
.
Зокрема, FFloat32
робить дві речі, про які закликає стандарт C ++. Це:
- дозволяє діяти так, ніби одночасно більше одного члена спілки; від вас очікується запис членам плаваючої точки і читання з одного з цілих членів (9.5.1, [class.union])
- очікує, що розподіл бітового поля в союзі збігається з розподілом бітів значення плаваючої точки IEEE; однак, розподіл та вирівнювання членів бітфілдів у межах типу класу визначено реалізацією (9.6.1, [class.bit])
FFloat32
.