2013-10-17 63 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

回答