จะทำยังไงให้หน่วย conversions ในเพิ่ม::ในหน่วยเดียวความแม่นยำโบยบิ?

0

คำถาม

ฉันมีนามแฝงสำหรับเรเดียนและหน่วยเป็นองศาซึ่งนั่นใช้โฟลที่จัดเก็บข้อมูลประเภทนี้ได้นะ

ตอนที่ฉันแปลงระหว่างสองคนนี้หน่วยผมเห็นชุมนุช่วยส่งเสริมค่าที่จะสองเท่าและจากนั้นกลับไปที่โบยบิตอนที่ทำ conversions.

Q: ผมต้องทำยังไงให้แน่ใจว่าทุกปฏิบัติการและ conversions อยู่ในโบยบิ?

ขอรหัส:

using radians_f = boost::units::quantity<boost::units::si::plane_angle, float>;
using degrees_f = boost::units::quantity<boost::units::degree::plane_angle, float>;

degrees_f to_degrees(const radians_f& angle) { return static_cast<degrees_f>(angle); }
radians_f to_radians(const degrees_f& angle) { return static_cast<radians_f>(angle); }

จากคอมไพเลอร์เอ็กซ์พลอเรอร์ฉันเห็นตามโรงเรีคำแนะนำ: https://godbolt.org/z/Gnjr54dn6

  • cvtss2sd -Converts นนัดเดียว-จำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุดในกอง"แปลง-จาก"แหล่งข่าว operand ต้องเป็นสองจำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุดในปลายทาง operand.

  • mulsd -Multiplies ที่ต่ำสองจำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุดในครั้งที่สองแหล่ง operand ที่ต่ำสองจำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุดในตอนแรกแหล่งข่าว operand.

  • cvtsd2ss -Converts เป็นสองจำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุดในกอง"แปลง-จาก"แหล่งข่าว operand เพื่อนนัดเดียว-จำนวนทศนิยมตัวลอยบินบนฟ้า-ค่าจุด

À¡à§à¥:ฉันจะไม่แปลกใจเลยถ้าฉันมีกำหนดไว้ของฉันชื่อหรือ/ของฉันและการแปลงฟังก์ชันที่เกิดจาก.

boost boost-units c++ c++14
2021-11-23 10:02:53
1

คำตอบที่ดีที่สุด

1

ฉันเจอ hacky workaround(ซึ่งฉันมั่นใจว่าสามารถเป็น"productionized"ด้วยการเพิ่มหน่วยสะทกสะทานเลยละสิที่ 57.เอ็กซ์หน่วยเป็นองศาซึ่งต่อ radian งอย่างต่อเนื่อง)เพื่อหลีกเลี่ยง conversions ต้องและจาก doubleแต่มันจริงๆเรื่องสำคัญคือความจริงที่ว่าเพิ่มหน่วยนั่นคือสาเหตุที่ทำให้เกิอีกอตช์เราเจอเดคเคลนดอยล์เหมือมุมสูงเท่านั้น:ความทรงจำความสนและโกดังเก็บของซึ่งไม่จำเป็นหรอถ้าคุณใช้ float โดยตรงหรือแม้แต่ของตัวเองสำหรับ wrapper float.

สาธิต: https://godbolt.org/z/afPE7baxT

ดังนั้นขณะที่อยู่เหนือแสดงอย่างหนึ่ง(unrefined)ทางที่จะบังคับการคำนวอยู่ที่โบยบิถ้าคุณถามจริงๆคือ"ยังไงฉันหลีกเลี่ยงมุมสูงเท่านั้น"คุณยังคงหน่อยห่างไกลจาก nirvana.

2021-11-23 10:46:36

น่าเสียดายที่การใช้มุมเป็นคนน้อยที่สุ reproducible ตัวอย่างเช่นในคำถามของ"ได้ยังไงฉันหลีกเลี่ยงมุมสูงเท่านั้น"ตั้งแต่ปัญหามารถใช้กับหลายคนอื่นหน่วยที่ฉันต้องการเช่นกัน
CJCombrink

@CJCombrink ใช่สิ่งที่ฉันกำลังจะพูดก็คือว่ามันดูเหมือนหลบหน้า(ทั้งหมด)คุณได้ยินแล้วไปจัดการก่ออาจจะต้องทิ้งเพิ่มหน่วยถ้าดูจากการสาธิตผมทำด้านบน
John Zwinck

มี destructor หรือคัดลอก constructor อยู่ของคุณ wrapper สามารถเพราะนี่ suboptimality.
n. 1.8e9-where's-my-share m.

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่