0

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

我遇到的麻烦是,简单地取倒数 1/f 会导致零截断,所以即使转换为纳秒后,结果也是 0ns。如果我先转换为兆赫然后取倒数,那么第一步再次导致零截断。

我发现的一种解决方法是使用 boost::rational 作为数量的 value_type。这行得通,但它让我觉得丑陋。有没有更好的解决方案?我对 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

0

1.0f/f避免截断

于 2013-10-17T20:30:25.583 回答