Am pseudonime pentru radiani și de grade care folosesc pluti ca tip de stocare.
Când am converti între aceste două unități văd de asamblare a promova valorile duble și apoi înapoi la plutește atunci când faci conversii.
Q: Cum pot să mă asigur că toate operațiunile și conversii de ședere în plutește?
Codul Meu:
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); }
Din compiler explorer văd următoarele instrucțiuni de asamblare: https://godbolt.org/z/Gnjr54dn6
cvtss2sd - Convertește un singur precizie în virgulă mobilă valoare în "convertiți-de la" sursa operand la o dublă precizie în virgulă mobilă valoare operand destinație.
mulsd - Multiplică scăzut cu dublă precizie în virgulă mobilă valoare în cel de-al doilea operand sursă de joasă dublă precizie în virgulă mobilă valoare în primul operand sursă.
cvtsd2ss - Convertește o dublă precizie în virgulă mobilă valoare în "convertiți-de la" sursa operand de la un singur precizie în virgulă mobilă valoare
PS: eu nu aș fi surprins dacă am definit mea pseudonime sau/și mi funcții de conversie incorect.