float
C ++ 부동 소수점입니다. FFloat32
는 플로트의 부호, 가수 및 지수 부분에 대한 분해 비트 필드뿐만 아니라 플로트뿐만 아니라 플로트를 나타내는 구조입니다.
당신은 일반적으로해야 결코 사용하지 않는 FFloat32
경우를 제외하고는 :
- 당신은
FFloat32
(매우 드물다) 기대하는 API를 사용하고 있거나
- 부동 소수점 값을 가진 일종의 저수준 비트 해커를 수행해야합니다 (요즘 상당히 드문 경우)
그것은이 아니다 FFloat32
입니다 나쁜 그것이 정말 당신이 포인트 사용을 부동 범용 필요한 것 아무것도 제공하지 않습니다 단지, 그 자체를.
평범한 오래된 것보다 덜 일반적입니다. float
가독성에 약간의 영향을 미칩니다 (다른 사람들은 한 눈에 무엇을 즉시 알지 못할 수도 있습니다). 또한 암시 적으로 변환되지 않으므로 많이 float
입력 할 것 something.FloatValue
입니다.이 또한 큰 문제는 아니지만 지루할 수 있습니다.
마지막으로 공용체와 비트 필드의 사용은 이식 가능하지 않으며 구현 정의되어 있습니다 (아래 참조). 이것은 아니다 당신의 문제 , 지원되는 모든 구현에 사용할 수 있도록 유형이 구조화되어 있는지 확인하는 것이 Epic의 일이지만, 새로운 컴파일러 일 때 유형 구현에 문제가 없으면 버그의 잠재적 원인입니다. 버전은 지원되는 컴파일러 목록에 릴리스되거나 추가됩니다.
따라서 부동 소수점 표현에서 개별 비트로 재생할 필요가 없다면 피해야합니다. FFloat32
(사촌, FFloat16
표준 16 비트 C ++ 부동 소수점 유형이 없으므로 약간 더 유용 할 수 있습니다).
" 속도 "에 대한 구성 요소의 정수 표현을 통해 플로트를 조작하는 것이 일반적이었습니다 . 최신 컴퓨터는 많은 플랫폼에 대한 필요성과 다양한 이러한 종류의 작업을 수행하는 데 사용할 수있는 유형 제거 기술은 실제로 모든 이벤트에서 성능이나 정확성에 해로울 수 있습니다.
Unreal의 GitHub 리포지토리를 검색하면 해당 FFloat32
유형의 사용이 거의 없음을 알 수 있습니다. 그들 모두의 정의에 FFloat32
자체의 정의 또는의 정의에있다 FFloat16
.
구체적으로 특별히, FFloat32
C ++ 표준이 요구하는 두 가지 작업을 수행합니다. 그것:
- 한 번에 둘 이상의 노조 구성원이 활동중인 것처럼 행동 할 수 있습니다. 부동 소수점 멤버에 쓰고 정수 멤버 중 하나에서 읽어야합니다 (9.5.1, [class.union])
- 유니온 내 비트 필드 할당이 IEEE 부동 소수점 값의 비트 할당과 일치 할 것으로 예상합니다. 그러나 클래스 유형 내에서 비트 필드 멤버의 할당 및 정렬은 구현에 따라 정의됩니다 (9.6.1, [class.bit])
FFloat32
.