2

我想在 C++ 中进行数值微分。为了类型安全,我想使用boost::units避免混合单位,但也boost::units::absolute避免混合相对单位和绝对单位。

一个最小的例子是将速度计算为位置变化除以时间变化的函数:v = dx/dt,可以近似为(x1 - x0)/(t1 - t0)

在这个例子v中,有一个绝对单位(速度)dxdt一个相对单位(距离/持续时间)。

如果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

4

1 回答 1

0

从上的文档boost::units::absolute

描述

表示绝对单位(点而不是向量)的包装器。

时空事件是点(如果不被视为半径向量),它们的差异是向量。速度也是一个向量。因此,您的假设确实看起来是错误的。

于 2021-05-25T20:37:26.263 回答