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