У меня есть псевдонимы для радианов и градусов, которые используют float в качестве типа хранения.
Когда я конвертирую между этими двумя единицами, я вижу, что сборка увеличивает значения до двойных, а затем снова до плавающих при выполнении преобразований.
Вопрос: Как я могу убедиться, что все операции и преобразования остаются в плавающих значениях?
Мой Код:
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 - Преобразует значение с плавающей запятой одной точности в исходном операнде “преобразовать из” в значение с плавающей запятой двойной точности в целевом операнде.
mulsd - Умножает значение с плавающей запятой низкой двойной точности во втором исходном операнде на значение с плавающей запятой низкой двойной точности в первом исходном операнде.
cvtsd2ss - Преобразует значение с плавающей запятой двойной точности в исходном операнде “преобразовать из” в значение с плавающей запятой одной точности
PS: Я не удивлюсь, если я неправильно определил свои псевдонимы или/и функции преобразования.