GCC Code Coverage Report


Directory: include/polyfloat/
File: include/polyfloat/module/math/details/sincos_coefs.hpp
Date: 2026-11-09 15:28:50
Exec Total Coverage
Lines: 94 94 100.0%
Functions: 8 8 100.0%
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
10 namespace plf::_
11 {
12
13 // Sollya coefficients for sin and cos remez polynomials on [0, pi/4]
14
15 600 template<typename T> auto cos_coefs()
16 {
17 if constexpr (std::is_same_v<T, float>)
18 {
19 return kumi::tuple{T(0x1p+0f), T(0x1p-1f), T(0x1.55554ap-5f), T(-0x1.6c0c32p-10f), T(0x1.99eb9cp-16f)};
20 }
21 else if constexpr (std::is_same_v<T, double>)
22 {
23 return kumi::tuple{T(0x1p+0),
24 T(0x1.p-1),
25 T(-0x1.5555555555551p-5),
26 T(0x1.6c16c16c15d47p-10),
27 T(-0x1.a01a019ddbcd9p-16),
28 T(0x1.27e4f8e06d9a5p-22),
29 T(-0x1.1eea7c1e514d4p-29),
30 T(0x1.8ff831ad9b219p-37)};
31 }
32 else if constexpr (std::same_as<T, double_real_t<float>>)
33 {
34 //using r_t = double_real_t<float>
35 140 return kumi::tuple{plf::_::from_pair<float>(0x1p+0f, +0x0p+0f),
36 140 plf::_::from_pair<float>(-0x1p-1f, +0x1.8p-48f),
37 140 plf::_::from_pair<float>(0x1.555556p-5f, -0x1.55614p-30f),
38 140 plf::_::from_pair<float>(-0x1.6c16c2p-10f, +0x1.376484p-35f),
39 140 plf::_::from_pair<float>(0x1.a019f8p-16f, +0x1.33c19p-42f),
40 140 plf::_::from_pair<float>(-0x1.27df56p-22f, -0x1.fe7cbp-49f),
41 140 plf::_::from_pair<float>(0x1.1b8fbcp-29f, -0x1.3ccf8p-58)};
42 }
43 else if constexpr (std::same_as<T, triple_real_t<float>>)
44 {
45 //using r_t = double_real_t<float>;
46 122 return kumi::tuple{plf::_::from_triple<float>(0x1p+0f, +0x0p+0f, +0x0p+0f),
47 122 plf::_::from_triple<float>(-0x1p-1f, +0x1p-68f, +0x0p+0f),
48 122 plf::_::from_triple<float>(0x1.555556p-5f, -0x1.555556p-30f, +0x1.53c8cp-55f),
49 122 plf::_::from_triple<float>(-0x1.6c16c2p-10f, +0x1.27d27ep-35f, +0x1.a71a8p-60f),
50 122 plf::_::from_triple<float>(0x1.a01a02p-16f, -0x1.7f9f04p-42f, -0x1.36ep-72f),
51 122 plf::_::from_triple<float>(-0x1.27e4fcp-22f, +0x1.150d44p-47f, +0x1.b0d88p-72f),
52 122 plf::_::from_triple<float>(0x1.1eed8cp-29f, +0x1.4dd5p-56f, +0x1.19bbp-81f),
53 122 plf::_::from_triple<float>(-0x1.9392c2p-37f, -0x1.8aab28p-63f, -0x1.7c58p-89f),
54 122 plf::_::from_triple<float>(0x1.aa972ep-45f, -0x1.9e9332p-70f, -0x1.74e9p-95f)};
55 }
56 else if constexpr (std::same_as<T, double_real_t<double>>)
57 {
58 //using r_t = double_real_t<double>;
59 214 return kumi::tuple{plf::_::from_pair<double>(0x1p+0, +0x0p+0),
60 214 plf::_::from_pair<double>(-0x1p-1, +0x1.18p-102),
61 214 plf::_::from_pair<double>(0x1.5555555555555p-5, +0x1.5555555548eb4p-59),
62 214 plf::_::from_pair<double>(-0x1.6c16c16c16c17p-10, +0x1.f49f4a5768168p-65),
63 214 plf::_::from_pair<double>(0x1.a01a01a01a01ap-16, +0x1.9fe8c4b57e18p-76),
64 214 plf::_::from_pair<double>(-0x1.27e4fb7789f5cp-22, -0x1.c9f238e0a982dp-76),
65 214 plf::_::from_pair<double>(0x1.1eed8eff8d896p-29, +0x1.978ac9749f96fp-83),
66 214 plf::_::from_pair<double>(-0x1.93974a8c07793p-37, +0x1.82ee317825dbp-94),
67 214 plf::_::from_pair<double>(0x1.ae7f3e726ce4fp-45, -0x1.6d4bb0e413fafp-99),
68 214 plf::_::from_pair<double>(-0x1.682784de2f11p-53, -0x1.7124a4345b29ep-108),
69 214 plf::_::from_pair<double>(0x1.e53fccfb5614cp-62, -0x1.daedc787b65f8p-117),
70 214 plf::_::from_pair<double>(-0x1.0b15f05d82628p-70, +0x1.b38f07d777c42p-125)};
71 }
72 else if constexpr (std::same_as<T, triple_real_t<double>>)
73 {
74 //using r_t = triple_real_t<double>;
75 return kumi::tuple{
76 124 plf::_::from_triple<double>(0x1p+0, +0x0p+0, +0x0p+0),
77 124 plf::_::from_triple<double>(-0x1p-1, +0x0p+0, +0x0p+0),
78 124 plf::_::from_triple<double>(0x1.5555555555555p-5, +0x1.5555555555555p-59, +0x1.5555555555474p-113),
79 124 plf::_::from_triple<double>(-0x1.6c16c16c16c17p-10, +0x1.f49f49f49f49fp-65, +0x1.27d27d29369cep-119),
80 124 plf::_::from_triple<double>(0x1.a01a01a01a01ap-16, +0x1.a01a01a01a01ap-76, +0x1.9fa8bd5859p-136),
81 124 plf::_::from_triple<double>(-0x1.27e4fb7789f5cp-22, -0x1.cbbc05b4fa99ap-76, +0x1.c7712d610a62p-132),
82 124 plf::_::from_triple<double>(0x1.1eed8eff8d898p-29, -0x1.2aec959e14c06p-83, -0x1.97e00071ede88p-138),
83 124 plf::_::from_triple<double>(-0x1.93974a8c07c9dp-37, -0x1.05d6f8a2ef7e7p-92, +0x1.d326c1a15e4eep-146),
84 124 plf::_::from_triple<double>(0x1.ae7f3e733b81fp-45, +0x1.1d8656ac84d0dp-101, +0x1.1fd2c1d0996f4p-155),
85 124 plf::_::from_triple<double>(-0x1.6827863b97d97p-53, -0x1.eec00cb429655p-107, -0x1.4ee20fb1234p-167),
86 124 plf::_::from_triple<double>(0x1.e542ba4020225p-62, +0x1.e7fb335aedc9bp-120, -0x1.fffab29cc914p-174),
87 124 plf::_::from_triple<double>(-0x1.0ce396db7f852p-70, -0x1.e690437d35839p-124, +0x1.5c76a791a5431p-178),
88 124 plf::_::from_triple<double>(0x1.f2cf01972f4a2p-80, +0x1.4ea269f34fe63p-138, -0x1.750170debd68p-192),
89 124 plf::_::from_triple<double>(-0x1.88e85fc67dc3cp-89, -0x1.17e7f4e4b8ed6p-143, +0x1.486eb1e708244p-199),
90 124 plf::_::from_triple<double>(0x1.0a18a211f01bdp-98, +0x1.206dbe6558fcp-153, -0x1.4057cbbd0b374p-207),
91 124 plf::_::from_triple<double>(-0x1.3931e172b6931p-108, -0x1.ae8922f8ac0fp-163, -0x1.6b9f3d518571ap-217),
92 124 plf::_::from_triple<double>(0x1.41cd7944e8bc1p-118, -0x1.c71cf34af3e2p-177, +0x1.eda8cfeb4e1p-234)};
93 }
94 }
95
96 600 template<typename T> auto sino_x_coefs()
97 {
98 if constexpr (std::is_same_v<T, float>)
99 {
100 return kumi::tuple{T(0x1p+0), T(-0x1.555544p-3f), T(0x1.11073ap-7f), T(-0x1.9943f2p-13f)};
101 }
102 else if constexpr (std::is_same_v<T, double>)
103 {
104 return kumi::tuple{T(0x1p+0),
105 T(-0x1.5555555555548p-3),
106 T(0x1.111111110f7d0p-7),
107 T(-0x1.a01a019bfdf03p-13),
108 T(0x1.71de3567d4896p-19),
109 T(-0x1.ae5e5a9291691p-26),
110 T(0x1.5d8fd1fcf0ec1p-33)};
111 }
112 else if constexpr (std::same_as<T, double_real_t<float>>)
113 {
114 //using r_t = double_real_t<float>
115 140 return kumi::tuple{plf::_::from_pair<float>(0x1p+0, +0x0p+0),
116 140 plf::_::from_pair<float>(-0x1.555556p-3, +0x1.555558p-28),
117 140 plf::_::from_pair<float>(0x1.111112p-7, -0x1.dde238p-32),
118 140 plf::_::from_pair<float>(-0x1.a01a02p-13, +0x1.93dd88p-39),
119 140 plf::_::from_pair<float>(0x1.71de34p-19, +0x1.692c54p-44),
120 140 plf::_::from_pair<float>(-0x1.ae5dep-26, -0x1.d8e3cp-52),
121 140 plf::_::from_pair<float>(0x1.5d7052p-33, +0x1.74a7ep-61)};
122 }
123 else if constexpr (std::same_as<T, triple_real_t<float>>)
124 {
125 //using r_t = double_real_t<float>;
126 122 return kumi::tuple{plf::_::from_triple<float>(0x1p+0, +0x0p+0, +0x0p+0),
127 122 plf::_::from_triple<float>(-0x1.555556p-3, +0x1.555556p-28, -0x1.555558p-53),
128 122 plf::_::from_triple<float>(0x1.111112p-7, -0x1.dddddep-32, +0x1.112cp-59),
129 122 plf::_::from_triple<float>(-0x1.a01a02p-13, +0x1.7f97fap-39, -0x1.334fep-64),
130 122 plf::_::from_triple<float>(0x1.71de3ap-19, +0x1.55b1fcp-45, +0x1.ac39p-70),
131 122 plf::_::from_triple<float>(-0x1.ae6456p-26, -0x1.fdb8d4p-52, +0x1.28c7p-78),
132 122 plf::_::from_triple<float>(0x1.612462p-33, -0x1.489358p-58, +0x1.0ae3p-85),
133 122 plf::_::from_triple<float>(-0x1.ae7f7p-41, -0x1.abd16ep-68, -0x1.415fcp-94),
134 122 plf::_::from_triple<float>(0x1.95546cp-49, -0x1.a12e54p-74, +0x1.1da4p-103),
135 122 plf::_::from_triple<float>(-0x1.3beacep-57, +0x1.2c0736p-82, +0x1.d2aea8p-107)};
136 }
137 else if constexpr (std::same_as<T, double_real_t<double>>)
138 {
139 214 return kumi::tuple{plf::_::from_pair<double>(0x1p+0, +0x0p+0),
140 214 plf::_::from_pair<double>(-0x1.5555555555555p-3, -0x1.5555555555555p-57),
141 214 plf::_::from_pair<double>(0x1.1111111111111p-7, +0x1.1111111110b28p-63),
142 214 plf::_::from_pair<double>(-0x1.a01a01a01a01ap-13, -0x1.a01a017855fcp-73),
143 214 plf::_::from_pair<double>(0x1.71de3a556c734p-19, -0x1.c154fb0f012e5p-73),
144 214 plf::_::from_pair<double>(-0x1.ae64567f544e4p-26, +0x1.c06c29a3555bcp-80),
145 214 plf::_::from_pair<double>(0x1.6124613a86d09p-33, +0x1.d93f6f54fe66cp-87),
146 214 plf::_::from_pair<double>(-0x1.ae7f3e733b808p-41, -0x1.4c0dfcb7beee8p-97),
147 214 plf::_::from_pair<double>(0x1.952c7703074efp-49, +0x1.800a8d6fc3118p-105),
148 214 plf::_::from_pair<double>(-0x1.2f49b4624f386p-57, +0x1.107bdd978ff7cp-113),
149 214 plf::_::from_pair<double>(0x1.71b8e345c53b4p-66, -0x1.62182f0e94a3p-123),
150 214 plf::_::from_pair<double>(-0x1.760c2a005ccbep-75, +0x1.f000c1aff4a2ep-129),
151 214 plf::_::from_pair<double>(0x1.365f1b4976ce5p-84, -0x1.0292b83c87daep-138)};
152 }
153 else if constexpr (std::same_as<T, triple_real_t<double>>)
154 {
155 //using r_t = double_real_t<double>;
156 return kumi::tuple{
157 124 plf::_::from_triple<double>(0x1p+0, +0x0p+0, +0x0p+0),
158 124 plf::_::from_triple<double>(-0x1.5555555555555p-3, -0x1.5555555555555p-57, -0x1.5555555555555p-111),
159 124 plf::_::from_triple<double>(0x1.1111111111111p-7, +0x1.1111111111111p-63, +0x1.111111110e62p-119),
160 124 plf::_::from_triple<double>(-0x1.a01a01a01a01ap-13, -0x1.a01a01a01a01ap-73, -0x1.a019e05fd4p-133),
161 124 plf::_::from_triple<double>(0x1.71de3a556c734p-19, -0x1.c154f8ddc6cp-73, +0x1.71de2c8b111d6p-127),
162 124 plf::_::from_triple<double>(-0x1.ae64567f544e4p-26, +0x1.c062e06d1f209p-80, -0x1.c5c35ae4e386cp-136),
163 124 plf::_::from_triple<double>(0x1.6124613a86d09p-33, +0x1.f28e0cc748ebdp-87, +0x1.698c02ecfb12p-145),
164 124 plf::_::from_triple<double>(-0x1.ae7f3e733b81fp-41, -0x1.1d8656b0ed5fap-97, +0x1.332f46ff869ep-152),
165 124 plf::_::from_triple<double>(0x1.952c77030ad4ap-49, +0x1.ac9814643646cp-103, -0x1.672ff9149e1e4p-157),
166 124 plf::_::from_triple<double>(-0x1.2f49b46814157p-57, -0x1.2650e850a9639p-112, -0x1.87d4dcc7949f8p-167),
167 124 plf::_::from_triple<double>(0x1.71b8ef6dcf572p-66, -0x1.d06ed193305d2p-120, +0x1.c8a6569527851p-174),
168 124 plf::_::from_triple<double>(-0x1.761b41316381ap-75, +0x1.64ae3e5cd8493p-129, -0x1.e07ede3a3bb48p-184),
169 124 plf::_::from_triple<double>(0x1.3f3ccdd165ef7p-84, +0x1.8e705b5f4306bp-140, -0x1.6170961bf218p-198),
170 124 plf::_::from_triple<double>(-0x1.d1ab1c2d9396ap-94, +0x1.0fb92a3020019p-149, +0x1.79c7336af0a5ap-203),
171 124 plf::_::from_triple<double>(0x1.259f984ab1657p-103, +0x1.115b541983fe8p-157, -0x1.b6ec9fca0d8bap-211),
172 124 plf::_::from_triple<double>(-0x1.434c28656c9d2p-113, +0x1.04f1739868a88p-170, +0x1.70d3ba901a7ep-224),
173 124 plf::_::from_triple<double>(0x1.37f7bad17451dp-123, +0x1.682a8cc6ac10dp-177, -0x1.6fe5ff9fe424ep-232)};
174 }
175 }
176 }
177