Mám aliasy pro radiánů a stupňů, které používají float jako typ úložiště.
Když jsem převod mezi těmito dvěma jednotkami vidím sestava podporovat hodnoty se zdvojnásobí, a pak zpět do plováky, když dělá konverze.
Q: Jak se mohu ujistit, že všechny operace a konverze pobyt v plováky?
Můj Kód:
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); }
Od kompilátoru explorer vidím následující montážní pokyny: https://godbolt.org/z/Gnjr54dn6
cvtss2sd - Převádí single-precision floating-point hodnoty v "převést-od" zdroje operandů na double-precision floating-point hodnoty v cílovém operandu.
mulsd - Násobí nízké double-precision floating-point hodnoty v druhý zdrojový operand nízkou dvojitou přesností plovoucí desetinnou čárkou hodnoty v první zdrojový operand.
cvtsd2ss - Konvertuje double-precision floating-point hodnoty v "převést-od" zdrojového operandu do single-precision floating-point hodnoty
PS: já bych neměl být překvapen, když jsem definoval své přezdívky nebo/a můj konverzní funkce nesprávně.