Eu tenho aliases para radianos e graus que usar float como o tipo de armazenamento.
Quando eu converter-se entre essas duas unidades de eu ver a montagem de promover os valores de duplicatas e, em seguida, de volta para flutua ao fazer conversões.
Q: Como posso certificar-se de que todas as operações e conversões de estadia em carros alegóricos?
O Meu Código:
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); }
A partir de compilador explorer eu vejo as seguintes instruções de montagem: https://godbolt.org/z/Gnjr54dn6
cvtss2sd - Converte um único ponto flutuante de precisão do valor em "converter-de" operando de origem para um casal de ponto flutuante de precisão do valor no operando de destino.
mulsd - Multiplica-se a baixa de dupla-precisão de ponto flutuante, o valor do segundo operando de origem, pela baixa precisão dupla valor de ponto flutuante no primeiro operando de origem.
cvtsd2ss - Converte uma dupla-precisão de ponto flutuante de valor a "converter-de" operando de origem para um único ponto flutuante de precisão do valor
PS: eu não ficaria surpreso se eu tiver definido minha aliases ou/e o meu funções de conversão incorretamente.