【发布时间】:2022-01-01 19:49:13
【问题描述】:
我有使用 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 - 将“convert-from”源操作数中的单精度浮点值转换为目标操作数中的双精度浮点值。
-
mulsd - 将第二个源操作数中的低位双精度浮点值乘以第一个源操作数中的低位双精度浮点值。
-
cvtsd2ss - 将“convert-from”源操作数中的双精度浮点值转换为单精度浮点值
PS:如果我错误地定义了我的别名或/和我的转换函数,我不会感到惊讶。
【问题讨论】:
标签: c++ boost c++14 boost-units