float
, é um ponto flutuante em C ++. FFloat32
é uma estrutura que representa um flutuador e (através de uma união) os campos de bits decompostos para as partes do sinal, mantissa e expoente desse flutuador.
Você geralmente nunca deve usar, FFloat32
exceto quando:
- você está usando alguma API que espera um
FFloat32
(estes são muito raros) ou
- você precisa fazer algum tipo de invasão de bits de baixo nível com um valor de ponto flutuante (também bastante raro atualmente)
Não FFloat32
é ruim , por si só, apenas não oferece realmente nada que você precisa para o uso de ponto flutuante de uso geral.
É menos comum do que um simples velho float
, que tem algum impacto menor na legibilidade (outras pessoas podem não saber imediatamente para que serve imediatamente). Também não é convertido implicitamente em, float
portanto você digitará something.FloatValue
muito, o que também não é grande coisa, mas pode ser entediante.
Por fim, o uso de uniões e campos de bits não é portátil e é definido pela implementação (veja abaixo). Esse não é o seu problema, é tarefa da Epic garantir que o tipo seja estruturado para que seja utilizável em todas as implementações suportadas, mas é uma fonte potencial de erros se eles não conseguirem detectar um problema com a implementação do tipo quando um novo compilador A versão é lançada ou adicionada à lista de compiladores suportados.
Portanto, a menos que você precise brincar com os bits individuais na representação de ponto flutuante, provavelmente deve evitar FFloat32
(seu primo FFloat16
, pode ter um pouco mais de utilidade, pois não há um tipo de ponto flutuante C ++ de 16 bits padrão).
Costumava ser comum manipular carros alegóricos por meio de representações inteiras de seus componentes para " velocidade ". Os computadores modernos evitam grande parte dessa necessidade de muitas plataformas, e as várias técnicas de punção de tipo que podem ser usadas para fazer esse tipo de coisa podem, na verdade, ser prejudiciais ao desempenho ou à correção em qualquer caso.
Deve-se dizer que uma pesquisa no repositório GitHub da Unreal revela muito poucos usos do FFloat32
tipo. Todos eles estão na definição de FFloat32
si ou na definição de FFloat16
.
Especificamente, FFloat32
faz duas coisas que o padrão C ++ chama. Isto:
- permite que você aja como se mais de um membro do sindicato estivesse ativo ao mesmo tempo; você deve escrever nos membros do ponto flutuante e ler a partir de um dos membros inteiros (9.5.1, [class.union])
- espera que a alocação de campo de bits dentro da união corresponda à da alocação de bits de um valor de ponto flutuante IEEE; no entanto, a alocação e o alinhamento dos membros do campo de bits dentro de um tipo de classe é definida pela implementação (9.6.1, [class.bit])
FFloat32
.