// Copyright 2023 Matt Borland // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #ifndef BOOST_DECIMAL_DETAIL_CMATH_ABS_HPP #define BOOST_DECIMAL_DETAIL_CMATH_ABS_HPP #include #include #include #include #ifndef BOOST_DECIMAL_BUILD_MODULE #include #include #endif namespace boost { namespace decimal { BOOST_DECIMAL_EXPORT template constexpr auto abs BOOST_DECIMAL_PREVENT_MACRO_SUBSTITUTION (const T rhs) noexcept BOOST_DECIMAL_REQUIRES(detail::is_decimal_floating_point_v, T) { if (BOOST_DECIMAL_LIKELY(!isnan(rhs))) { return signbit(rhs) ? -rhs : rhs; } else { return issignaling(rhs) ? nan_conversion(rhs) : rhs; } } } // namespace decimal } // namespace boost #endif //BOOST_DECIMAL_DETAIL_CMATH_ABS_HPP