float
, là tốt, một điểm nổi C ++. FFloat32
là một cấu trúc đại diện cho một số float cũng như (thông qua một liên minh) các bitfield bị phân hủy cho dấu hiệu của phần float đó, phần mantissa và số mũ.
Bạn thường không bao giờ nên sử dụng FFloat32
trừ khi:
- bạn đang sử dụng một số API mong đợi
FFloat32
(những thứ này rất hiếm) hoặc
- bạn cần thực hiện một số loại hack bit cấp thấp với giá trị dấu phẩy động (cũng khá hiếm trong những ngày này)
Không có gì FFloat32
là xấu cả , chỉ là nó không thực sự cung cấp cho bạn bất cứ thứ gì bạn cần cho việc sử dụng dấu phẩy động cho mục đích chung.
Nó ít phổ biến hơn so với một cái cũ đơn giản float
, có một số tác động dễ đọc nhỏ (những người khác có thể không biết ngay nó là cái gì trong nháy mắt). Nó cũng không hoàn toàn chuyển đổi thành float
vì vậy bạn sẽ gõ something.FloatValue
rất nhiều, đây cũng không phải là vấn đề lớn, nhưng có thể trở nên tẻ nhạt.
Cuối cùng, việc sử dụng các hiệp hội và bitfield của nó là không khả chuyển và được xác định theo triển khai (xem bên dưới). Đây không phải là vấn đề của bạn , công việc của Epic là đảm bảo loại được cấu trúc sao cho có thể sử dụng được cho tất cả các triển khai được hỗ trợ, nhưng đó là nguồn lỗi tiềm ẩn nếu chúng không gặp vấn đề với việc triển khai loại khi trình biên dịch mới phiên bản được phát hành hoặc thêm vào danh sách các trình biên dịch được hỗ trợ.
Vì vậy, trừ khi bạn có nhu cầu chơi với các bit riêng lẻ trong biểu diễn dấu phẩy động, có lẽ bạn chỉ nên tránh FFloat32
(anh em họ của nó FFloat16
, có thể có nhiều tiện ích hơn một chút vì không có loại dấu phẩy động C ++ 16 bit tiêu chuẩn).
Nó được sử dụng phổ biến để thao tác các float thông qua các biểu diễn số nguyên của các thành phần của chúng cho " tốc độ ". Các máy tính hiện đại không đáp ứng được nhiều nhu cầu cho nhiều nền tảng và các kỹ thuật xử lý kiểu khác nhau có thể được sử dụng để thực hiện loại điều này thực sự có thể gây bất lợi cho hiệu suất hoặc tính chính xác trong mọi sự kiện.
Cần phải nói rằng việc tìm kiếm kho lưu trữ GitHub của Unreal cho thấy rất ít cách sử dụng FFloat32
loại này. Tất cả chúng đều nằm trong định nghĩa của FFloat32
chính nó hoặc trong định nghĩa của FFloat16
.
Cụ thể, FFloat32
có hai điều mà tiêu chuẩn C ++ gọi ra. Nó:
- cho phép bạn hành động như thể nhiều hơn một thành viên của liên minh hoạt động cùng một lúc; bạn sẽ viết cho các thành viên dấu phẩy động và đọc từ một trong các thành viên số nguyên (9.5.1, [class.union])
- hy vọng phân bổ bitfield trong liên minh sẽ khớp với phân bổ bit của giá trị dấu phẩy động của IEEE; tuy nhiên, phân bổ và căn chỉnh của các thành viên bitfield trong một loại lớp được xác định thực hiện (9.6.1, [class.bit])
FFloat32
.