tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
abs.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_MATH_ABS_HPP
4#define TETL_MATH_ABS_HPP
5
6namespace etl {
7namespace detail {
8
9template <typename T>
10[[nodiscard]] constexpr auto abs_impl(T n) noexcept -> T
11{
12 // constexpr auto isInt = is_same_v<T, int>;
13 // constexpr auto isLong = is_same_v<T, long>;
14 // constexpr auto isLongLong = is_same_v<T, long long>;
15 // static_assert(isInt || isLong || isLongLong);
16
17 if (n >= T(0)) {
18 return n;
19 }
20 return n * T(-1);
21}
22
23} // namespace detail
24
29[[nodiscard]] constexpr auto abs(int n) noexcept -> int { return detail::abs_impl<int>(n); }
30
31[[nodiscard]] constexpr auto abs(long n) noexcept -> long { return detail::abs_impl<long>(n); }
32
33[[nodiscard]] constexpr auto abs(long long n) noexcept -> long long { return detail::abs_impl<long long>(n); }
34
35[[nodiscard]] constexpr auto abs(float n) noexcept -> float { return detail::abs_impl<float>(n); }
36
37[[nodiscard]] constexpr auto abs(double n) noexcept -> double { return detail::abs_impl<double>(n); }
38
39[[nodiscard]] constexpr auto abs(long double n) noexcept -> long double { return detail::abs_impl<long double>(n); }
40
41[[nodiscard]] constexpr auto fabs(float n) noexcept -> float { return detail::abs_impl<float>(n); }
42
43[[nodiscard]] constexpr auto fabsf(float n) noexcept -> float { return detail::abs_impl<float>(n); }
44
45[[nodiscard]] constexpr auto fabs(double n) noexcept -> double { return detail::abs_impl<double>(n); }
46
47[[nodiscard]] constexpr auto fabs(long double n) noexcept -> long double { return detail::abs_impl<long double>(n); }
48
49[[nodiscard]] constexpr auto fabsl(long double n) noexcept -> long double { return detail::abs_impl<long double>(n); }
50
51} // namespace etl
52
53#endif // TETL_MATH_ABS_HPP
constexpr auto abs(complex< T > const &z) -> T
Definition abs.hpp:13
Definition adjacent_find.hpp:8
constexpr auto fabsl(long double n) noexcept -> long double
Definition abs.hpp:49
constexpr auto fabsf(float n) noexcept -> float
Definition abs.hpp:43
constexpr auto fabs(float n) noexcept -> float
Definition abs.hpp:41