0
빈도 (예 : 20kHz)를주기 (50000 나노초)로 변환 할 때 Boost.Units 라이브러리를 사용하려고합니다. 나는 부동 소수점을 사용하고 싶지 않다.Boost.Units to frequency
내가 겪고있는 문제는 단순히 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;
한 개선을 피하기 위해 내가 지금까지 찾은이 훨씬 간단 동등한 위의 자세한 혼란 make_scaled_unit 라인을 교체하는 것입니다 : 타입 정의 decltype (si :: nano * si :: 초) 나노초; – user1714423