【发布时间】:2021-05-25 18:55:39
【问题描述】:
我想在 C++ 中执行数值微分。为了类型安全,我想使用boost::units 来避免混合单位,也想使用boost::units::absolute 来避免混合相对单位和绝对单位。
一个最小的例子是将速度计算为位置变化除以时间变化的函数:v = dx/dt,可以近似为(x1 - x0)/(t1 - t0)。
在这个例子中,v 有一个绝对单位(速度),dx 和dt 有一个相对单位(距离/持续时间)。
虽然boost::units 导出正确的单位,但如果我们简单地在任何地方取相对单位,
static_assert(std::is_same<boost::units::divide_typeof_helper<
boost::units::si::length,
boost::units::si::time>::type,
boost::units::si::velocity>::value);
如果我们希望除法的结果是绝对速度,static_assert 会失败:
static_assert(std::is_same<boost::units::divide_typeof_helper<
boost::units::si::length,
boost::units::si::time>::type,
boost::units::absolute<boost::units::si::velocity>>::value);
我是否做了错误的假设,即除以两个相对单位的结果应该总是产生一个绝对单位?或者这是boost::units的实现中的错误?
【问题讨论】:
标签: c++ differentiation boost-units