float
เป็นอย่างดีจุดลอยตัว C ++ FFloat32
เป็นโครงสร้างที่แสดงถึงการลอยเช่นเดียวกับ (ผ่านทางสหภาพ) bitfields ที่สลายตัวสำหรับสัญญาณของลอย mantissa และชิ้นส่วนเลขชี้กำลัง
คุณควรทั่วไปไม่เคยใช้FFloat32
ยกเว้นเมื่อ:
- คุณกำลังใช้ API บางอย่างที่คาดหวัง
FFloat32
(อันนี้หายากมาก) หรือ
- คุณต้องทำการแฮ็คบิตระดับต่ำด้วยค่าคะแนนลอยตัว (ซึ่งหาได้ยากในสมัยนี้)
มันไม่ได้ว่าFFloat32
เป็นที่ไม่ดีต่อ se ก็เพียงว่ามันไม่ได้โดดให้คุณสิ่งที่คุณต้องการเพื่อให้การใช้งานจุดลอยวัตถุประสงค์ทั่วไป
มันเป็นเรื่องธรรมดาน้อยกว่าเก่าธรรมดาfloat
ซึ่งมีผลกระทบต่อการอ่านเล็กน้อย (คนอื่นอาจไม่ทราบทันทีว่ามันคืออะไรสำหรับภาพรวม) นอกจากนี้ยังไม่แปลงโดยปริยายเพื่อfloat
ให้คุณพิมพ์ได้something.FloatValue
มากซึ่งไม่ใช่เรื่องใหญ่ แต่ก็น่าเบื่อ
ในที่สุดการใช้งานของสหภาพแรงงานและ bitfields นั้นไม่สามารถพกพาได้และมีการกำหนดการใช้งาน (ดูด้านล่าง) นี่ไม่ใช่ปัญหาของคุณมันเป็นงานของ Epic เพื่อให้แน่ใจว่ามีโครงสร้างประเภทนั้นเพื่อให้สามารถใช้งานได้สำหรับการใช้งานทั้งหมดที่ได้รับการสนับสนุน แต่เป็นแหล่งที่มาของข้อบกพร่องหากพวกเขาล้มเหลวในการตรวจสอบปัญหา รุ่นวางจำหน่ายหรือเพิ่มลงในรายการคอมไพเลอร์ที่รองรับ
ดังนั้นหากคุณไม่จำเป็นต้องเล่นกับแต่ละบิตในการเป็นตัวแทนจุดลอยตัวคุณก็ควรหลีกเลี่ยงFFloat32
(ลูกพี่ลูกน้องของมันFFloat16
อาจมีประโยชน์มากกว่าเล็กน้อยเนื่องจากไม่มีประเภทจุดลอยตัวมาตรฐาน C-16 บิต)
มันเคยเป็นเรื่องธรรมดาที่จะจัดการกับการลอยผ่านตัวแทนจำนวนเต็มขององค์ประกอบของพวกเขาสำหรับ " ความเร็ว " คอมพิวเตอร์สมัยใหม่ตัดขาดสิ่งที่จำเป็นสำหรับแพลตฟอร์มจำนวนมากและเทคนิคการสะกดรอยพิมพ์ต่าง ๆที่สามารถใช้ในการทำสิ่งต่าง ๆ เหล่านี้ได้จริงอาจเป็นอันตรายต่อประสิทธิภาพหรือความถูกต้องในทุกกรณี
มันควรจะบอกว่าการค้นหาคลังเก็บ GitHub ของ Unreal เผยให้เห็นการใช้งานของFFloat32
ประเภทน้อยมาก ทั้งหมดของพวกเขาอยู่ในความหมายของ ตัวเองหรือในความหมายของFFloat32
FFloat16
โดยเฉพาะFFloat32
ทำสองสิ่งที่มาตรฐาน C ++ เรียกใช้ มัน:
- อนุญาตให้คุณทำราวกับว่าสมาชิกสหภาพมากกว่าหนึ่งคนกำลังทำงานอยู่ในคราวเดียว คุณคาดว่าจะเขียนถึงสมาชิกทศนิยมและอ่านจากหนึ่งในสมาชิกจำนวนเต็ม (9.5.1, [class.union])
- คาดหวังการจัดสรรบิตฟิลด์ภายในสหภาพเพื่อให้ตรงกับการจัดสรรบิตของค่าทศนิยมของ IEEE อย่างไรก็ตามการจัดสรรและการจัดตำแหน่งของสมาชิก bitfield ภายในประเภทคลาสนั้นมีการกำหนดการใช้งาน (9.6.1, [class.bit])
FFloat32
ฉันจะให้ความสนใจในการอ่านตัวอย่างที่คุณได้พบว่าการใช้งานจริง