Example #1
0
		inline SPROUT_CONSTEXPR T
		triangle_value_impl(T const& t) {
			typedef double elem_type;
			using sprout::sin;
			using sprout::asin;
			return T(sprout::math::two_div_pi<elem_type>()) * asin(sin(T(sprout::math::two_pi<elem_type>()) * t));
		}
Example #2
0
		inline SPROUT_CONSTEXPR typename std::iterator_traits<RandomAccessIterator>::value_type
		dft_element_gen_impl_ra(
			RandomAccessIterator first, RandomAccessIterator last,
			typename std::iterator_traits<RandomAccessIterator>::value_type::value_type arg,
			typename std::iterator_traits<RandomAccessIterator>::difference_type pivot,
			typename std::iterator_traits<RandomAccessIterator>::difference_type k = 0
			)
		{
			typedef typename std::iterator_traits<RandomAccessIterator>::value_type value_type;
			using sprout::cos;
			using sprout::sin;
			return pivot == 0 ? *first * value_type(cos(arg * k), sin(arg * k))
				: sprout::detail::dft_element_gen_impl_ra(
					first, sprout::next(first, pivot), arg, pivot / 2, k
					)
					+ sprout::detail::dft_element_gen_impl_ra(
						sprout::next(first, pivot), last, arg, (sprout::distance(first, last) - pivot) / 2, k + pivot
						)
				;
		}
Example #3
0
			inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
			sinusoid_impl(
				Container const& cont,
				typename sprout::container_traits<Container>::value_type const& d,
				typename sprout::container_traits<Container>::value_type const& amplitude,
				typename sprout::container_traits<Container>::value_type const& phase,
				sprout::index_tuple<Indexes...>,
				typename sprout::container_traits<Container>::difference_type offset,
				typename sprout::container_traits<Container>::size_type size
				)
			{
				typedef typename sprout::container_traits<Container>::value_type value_type;
				using sprout::sin;
				return sprout::remake<Container>(
					cont, size,
					(Indexes >= offset && Indexes < offset + size
						? amplitude * sin(d * value_type(Indexes) + phase)
						: *sprout::next(sprout::internal_begin(cont), Indexes)
						)...
					);
			}
Example #4
0
		inline SPROUT_CONSTEXPR typename std::iterator_traits<InputIterator>::value_type
		dft_element_gen_impl_1(
			InputIterator first, InputIterator last,
			typename std::iterator_traits<InputIterator>::value_type::value_type arg,
			typename std::iterator_traits<InputIterator>::difference_type k = 0,
			typename std::iterator_traits<InputIterator>::value_type value
				= typename std::iterator_traits<InputIterator>::value_type(),
			typename std::iterator_traits<InputIterator>::value_type::value_type theta
				= typename std::iterator_traits<InputIterator>::value_type::value_type()
			)
		{
			typedef typename std::iterator_traits<InputIterator>::value_type value_type;
			using sprout::cos;
			using sprout::sin;
			return first == last ? value
				: value + sprout::detail::dft_element_gen_impl_1(
					sprout::next(first), last,
					arg,
					k + 1,
					*first * value_type(cos(theta), sin(theta)),
					arg * (k + 1)
					)
				;
		}
Example #5
0
		inline SPROUT_CONSTEXPR T
		sinusoid_value(T const& amplitude, T const& phase, T const& d, Index i) {
			using sprout::sin;
			return amplitude * sin(d * T(i) + phase);
		}