float
, va bene, un virgola mobile C ++. FFloat32
è una struttura che rappresenta un galleggiante e (tramite un'unione) i bitfield decomposti per il segno, la mantissa e le parti esponenti di quel galleggiante.
Generalmente non dovresti mai usare FFloat32
tranne quando:
- stai usando alcune API che
FFloat32
prevedono un (sono molto rare) o
- devi fare qualche tipo di hacking di bit di basso livello con un valore in virgola mobile (anche abbastanza raro in questi giorni)
Non FFloat32
è male , di per sé, è solo che non ti offre davvero tutto ciò di cui potresti aver bisogno per l'utilizzo in virgola mobile per scopi generici.
È meno comune di un semplice vecchio float
, che ha un impatto di leggibilità minore (altri potrebbero non sapere immediatamente a cosa servono a colpo d'occhio). Inoltre, non si converte in float
modo implicito, quindi digiterai something.FloatValue
molto, il che non è un grosso problema, ma potrebbe diventare noioso.
Infine, il suo utilizzo di sindacati e bitfield è non portatile e definito dall'implementazione (vedi sotto). Questo non è un tuo problema, è compito di Epic assicurarsi che il tipo sia strutturato in modo che sia utilizzabile per tutte le implementazioni supportate, ma è una potenziale fonte di bug se non riescono a rilevare un problema con l'implementazione del tipo quando un nuovo compilatore la versione viene rilasciata o aggiunta all'elenco dei compilatori supportati.
Quindi, a meno che tu non abbia bisogno di giocare con i singoli bit nella rappresentazione in virgola mobile, probabilmente dovresti semplicemente evitarlo FFloat32
(suo cugino FFloat16
, potrebbe avere un po 'più di utilità in quanto non esiste un tipo a virgola mobile C ++ standard a 16 bit).
Era comune manipolare i float tramite rappresentazioni intere dei loro componenti per " velocità ". I computer moderni ovviano a gran parte del bisogno di molte piattaforme e le varie tecniche di punzonatura che potrebbero essere utilizzate per fare questo genere di cose possono in realtà essere dannose per le prestazioni o la correttezza in ogni caso.
Dovrebbe dire che una ricerca nel repository GitHub di Unreal rivela pochissimi usi del FFloat32
tipo. Tutti sono nella definizione di FFloat32
se stesso o nella definizione di FFloat16
.
In particolare, FFloat32
fa due cose che lo standard C ++ chiama. It:
- ti consente di agire come se più di un membro del sindacato è attivo contemporaneamente; ci si aspetta che scriviate ai membri in virgola mobile e leggiate da uno dei membri interi (9.5.1, [class.union])
- si aspetta che l'allocazione dei bitfield all'interno dell'Unione corrisponda a quella dell'allocazione dei bit di un valore IEEE in virgola mobile; tuttavia, l'allocazione e l'allineamento dei membri bitfield all'interno di un tipo di classe sono definiti dall'implementazione (9.6.1, [class.bit])
FFloat32
.