Float'ı depolama türü olarak kullanan radyan ve dereceler için takma adlarım var.
Bu iki birim arasında dönüşüm yaptığımda, derlemenin değerleri iki katına çıkardığını ve daha sonra dönüşümler yaparken şamandıralara geri döndüğünü görüyorum.
Q: Nasıl alabilirim, emin olun ki tüm işlemler ve dönüşümler kalmak yüzer?
Kodum:
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); }
Derleyici gezgini'nden aşağıdaki derleme yönergelerini görüyorum: https://godbolt.org/z/Gnjr54dn6
cvtss2sd-Kaynak işlenendeki "convert-from" içindeki tek duyarlıklı kayan nokta değerini hedef işlenendeki çift duyarlıklı kayan nokta değerine dönüştürür.
mulsd-İkinci kaynak işlenendeki düşük çift duyarlıklı kayan nokta değerini ilk kaynak işlenendeki düşük çift duyarlıklı kayan nokta değeriyle çarpar.
cvtsd2ss-“convert-from” kaynak işlenenindeki çift duyarlıklı kayan nokta değerini tek duyarlıklı kayan nokta değerine dönüştürür
Not: Takma adlarımı veya / veya dönüştürme işlevlerimi yanlış tanımlarsam şaşırmam.