tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
blas1_vector_abs_sum.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2023 Tobias Hienzsch
3
4#ifndef TETL_LINALG_BLAS1_VECTOR_ABS_SUM
5#define TETL_LINALG_BLAS1_VECTOR_ABS_SUM
6
7#include <etl/_linalg/concepts.hpp>
8#include <etl/_type_traits/is_arithmetic.hpp>
9#include <etl/_utility/cmp_less.hpp>
10
11namespace etl::linalg {
12
13/// \ingroup linalg
14template <in_vector InVec, typename Scalar>
15constexpr auto vector_abs_sum(InVec v, Scalar init) noexcept -> Scalar
16{
17 auto sum = init;
18 for (typename InVec::size_type i{0}; etl::cmp_less(i, v.extent(0)); ++i) {
19 if constexpr (is_arithmetic_v<typename InVec::value_type>) {
20 sum += detail::abs_if_needed(v(i));
21 } else {
22 sum += detail::abs_if_needed(detail::real_if_needed(v(i)));
23 sum += detail::abs_if_needed(detail::imag_if_needed(v(i)));
24 }
25 }
26 return sum;
27}
28
29/// \ingroup linalg
30template <in_vector InVec>
31constexpr auto vector_abs_sum(InVec v) noexcept -> typename InVec::value_type
32{
33 return vector_abs_sum(v, typename InVec::value_type{});
34}
35
36} // namespace etl::linalg
37
38#endif // TETL_LINALG_BLAS1_VECTOR_ABS_SUM
constexpr auto vector_abs_sum(InVec v) noexcept -> typename InVec::value_type
Definition blas1_vector_abs_sum.hpp:31
constexpr auto vector_abs_sum(InVec v, Scalar init) noexcept -> Scalar
Definition blas1_vector_abs_sum.hpp:15
Definition accessor_conjugate.hpp:13
Definition adjacent_find.hpp:9