inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type phase_spectrum_impl( InputIterator first, InputIterator last, Result const& result, sprout::index_tuple<Indexes...>, typename sprout::container_traits<Result>::difference_type offset, typename sprout::container_traits<Result>::size_type size, typename sprout::container_traits<Result>::size_type input_size ) { using sprout::real; using sprout::imag; return sprout::remake<Result>( result, size, (Indexes >= offset && Indexes < offset + size && Indexes < offset + input_size ? sprout::atan2( sprout::llround(imag(*sprout::next(first, Indexes))), sprout::llround(real(*sprout::next(first, Indexes))) ) : *sprout::next(sprout::internal_begin(result), Indexes) )... ); }
inline SPROUT_CONSTEXPR typename T::value_type phase_spectrum_value(T const& x) { using sprout::real; using sprout::imag; return sprout::atan2(sprout::llround(imag(x)), sprout::llround(real(x))); }
inline SPROUT_CONSTEXPR typename T::value_type amplitude_spectrum_value(T const& x) { using sprout::real; using sprout::imag; return sprout::sqrt(real(x) * real(x) + imag(x) * imag(x)); }