提升单位频率到周期

Boost.Units frequency to period

本文关键字:周期 频率 单位      更新时间:2023-10-16

我正在尝试使用Boost.Units库将频率(例如,20kHz)转换为其周期的持续时间(50000纳秒)。我不想使用浮点数。

我遇到的麻烦是,简单地取倒数 1/f 会导致零截断,因此即使转换为纳秒,结果也会为 0ns。如果我先转换为兆赫兹,然后取倒数,第一步再次导致零截断。

我发现的一种解决方法是使用 boost::rational 作为数量的value_type。这行得通,但我觉得很丑陋。有没有更好的解决方案?我对单位库很陌生,到目前为止有点不知所措。

我现在的解决方案:

typedef make_scaled_unit<si::time, scale<10, static_rational<-9> > >::type nanosecond;
typedef quantity<si::frequency,rational<unsigned>> freq_quantity;
typedef quantity<nanosecond,rational<unsigned>> time_quantity;
rational<unsigned> val(20);
freq_quantity Fs(val*si::kilo*si::hertz);
cout << Fs << endl;
cout << static_cast<time_quantity>(rational<unsigned>(1)/Fs) << endl;

1.0f/f以避免截断