Boost.Units频率到句点

时间:2013-10-17 20:29:22

标签: c++ boost converter rational-numbers boost-units

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

我遇到的麻烦是简单地取倒数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 个答案:

答案 0 :(得分:0)

1.0f/f以避免截断