Частота Boost.Units к периоду

Я пытаюсь использовать библиотеку Boost.Units для преобразования частоты (например, 20 кГц) в длительность ее периода (50000 наносекунд). Я не хочу использовать с плавающей точкой.

Проблема, с которой я столкнулся, состоит в том, что простое взятие обратной 1 / f приводит к усечению нуля, поэтому даже после преобразования в наносекунды результат получается равным 0 нс. Если я вместо этого сначала преобразую в мегагерцы, а затем возьму обратное, снова первый шаг вызывает усечение нуля.

Один из обходных путей, который я нашел, состоит в том, чтобы использовать boost :: рациональное использование в качестве 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;

0

Решение

1.0f/f чтобы избежать усечения

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector