2013-10-17 32 views
0

我想在我的转换频率(例如,20kHz)到其周期(50000纳秒)的持续时间使用Boost.Units库。我不想使用浮点。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; 
+0

一个改进到目前为止,我发现的是,以取代上述这种简单得多相当于冗长和混乱make_scaled_unit行的:typedef decltype (si :: nano * si :: seconds)纳秒; – user1714423

回答