0

Boost.Units ライブラリを使用して、周波数 (たとえば 20kHz) をその期間 (50000 ナノ秒) に変換しようとしています。浮動小数点を使用したくありません。

私が抱えている問題は、単純に逆数の 1/f を取得するとゼロ切り捨てが発生するため、ナノ秒に変換した後でも結果が 0ns になることです。代わりに、最初にメガヘルツに変換してから逆数を取ると、最初のステップでゼロ切り捨てが発生します。

私が見つけた 1 つの回避策は、数量の value_type として boost::rational を使用することです。これはうまくいきますが、私には醜いと思います。より良い解決策はありますか?私は Units ライブラリにかなり慣れていないので、これまでのところ少し圧倒されています。

今のところ私の解決策:

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;
4

1 に答える 1