GCC Code Coverage Report


Directory: include/polyfloat/
File: include/polyfloat/module/math/details/rempio2_limits.hpp
Date: 2026-11-09 15:28:50
Exec Total Coverage
Lines: 8 8 100.0%
Functions: 84 96 87.5%
Branches: 0 0 -%

Line Branch Exec Source
1 //======================================================================================================================
2 /*
3 POLYFLOAT - Extended precision floating points
4 Copyright : POLYFLOAT Contributors & Maintainers
5 SPDX-License-Identifier: BSL-1.0
6 */
7 //======================================================================================================================
8 #pragma once
9 #include <polyfloat/details/callable.hpp>
10 #include <polyfloat/types/concepts.hpp>
11 #include <polyfloat/types/traits.hpp>
12 #include <type_traits>
13 #include <eve/module/math/decorator/math.hpp>
14
15 namespace plf
16 {
17 template<typename Options>
18 struct Rempio2_limit_t : eve::elementwise_callable<Rempio2_limit_t,
19 Options,
20 eve::quarter_circle_option,
21 eve::half_circle_option,
22 eve::full_circle_option,
23 eve::medium_option,
24 eve::big_option>
25 {
26 3716 template<concepts::polyfloat_like T> POLYFLOAT_ABI constexpr T operator()(as<T> v) const
27 {
28 3716 return POLYFLOAT_CALL(v);
29 }
30
31 3716 POLYFLOAT_CALLABLE_OBJECT(Rempio2_limit_t, Rempio2_limit_);
32 };
33
34 inline constexpr auto Rempio2_limit = eve::functor<Rempio2_limit_t>;
35 }
36
37 namespace plf::_
38 {
39 template<typename T, eve::callable_options O>
40 3716 constexpr T Rempio2_limit_(POLYFLOAT_DELAY(), O const&, eve::as<T> const& at) noexcept
41 {
42 if constexpr (dimension_v<T> == 1) return eve::Rempio2_limit(at);
43 else if constexpr (concepts::polyfloat_like<T>)
44 {
45 3670 if constexpr (O::contains(eve::quarter_circle)) return plf::prev(pio_4(eve::as<T>()));
46 18 else if constexpr (O::contains(eve::half_circle)) return plf::prev(pio_2(eve::as<T>()));
47 10 else if constexpr (O::contains(eve::full_circle)) return plf::prev(pi(eve::as<T>()));
48 18 else if constexpr (O::contains(eve::medium)) return T(0x1.9220e60p+50);
49 // return ieee_constant<0x1.6bcc41e900000p+47, 0x1.9220e60p+50f>(eve::as<u_t>{}); // 1.76858e+15, 2.0e14
50 else return plf::valmax(eve::as<T>());
51 }
52 else return plf::valmax(eve::as<T>());
53 }
54 }
55