10 #include <string_view>
16 [[nodiscard]] constexpr T
abs(T
t)
18 return (
t >= 0) ?
t : -
t;
23 #if (defined(__GNUC__) && !defined(__clang__))
27 template<
int> [[nodiscard]] constexpr
double sin (
double x) {
return std::sin (
x); }
28 template<
int> [[nodiscard]] constexpr
double cos (
double x) {
return std::cos (
x); }
29 template<
int,
int> [[nodiscard]] constexpr
double log (
double x) {
return std::log (
x); }
31 template<
int,
int> [[nodiscard]] constexpr
double log10(
double x) {
return std::log10(
x); }
32 template<
int> [[nodiscard]] constexpr
double exp (
double x) {
return std::exp (
x); }
34 template<
int,
int> [[nodiscard]] constexpr
double pow(
double x,
double y) {
return std::pow(
x, y); }
41 [[nodiscard]] constexpr
double upow(
double x,
unsigned u)
52 [[nodiscard]] constexpr
double ipow(
double x,
int i)
57 template<
int ITERATIONS>
58 [[nodiscard]] constexpr
double exp(
double x)
71 for (
auto k :
xrange(ITERATIONS)) {
78 int p = (i >= 0) ? i : -i;
92 return x - int(
x / y) * y;
95 template<
int ITERATIONS>
102 for (
int k = 1; k < (1 + 4 * ITERATIONS); ) {
116 template<
int ITERATIONS>
123 for (
int k = 2; k < (2 + 4 * ITERATIONS); ) {
137 template<
int ITERATIONS>
138 [[nodiscard]] constexpr
double sin(
double x)
165 return sign * cos_iter<ITERATIONS>(
x);
167 return sign * sin_iter<ITERATIONS>(
x);
171 template<
int ITERATIONS>
172 [[nodiscard]] constexpr
double cos(
double x)
198 return sign * sin_iter<ITERATIONS>(
x);
200 return sign * cos_iter<ITERATIONS>(
x);
206 template<
int E_ITERATIONS,
int L_ITERATIONS>
207 [[nodiscard]] constexpr
double log(
double x)
215 repeat(L_ITERATIONS, [&] {
216 auto ey = cstd::exp<E_ITERATIONS>(y);
217 y = y + 2.0 * (
x - ey) / (
x + ey);
222 template<
int E_ITERATIONS,
int L_ITERATIONS>
223 [[nodiscard]] constexpr
double log2(
double x)
225 return cstd::log<E_ITERATIONS, L_ITERATIONS>(
x) /
Math::ln2;
228 template<
int E_ITERATIONS,
int L_ITERATIONS>
229 [[nodiscard]] constexpr
double log10(
double x)
231 return cstd::log<E_ITERATIONS, L_ITERATIONS>(
x) /
Math::ln10;
234 template<
int E_ITERATIONS,
int L_ITERATIONS>
235 [[nodiscard]] constexpr
double pow(
double x,
double y)
237 return cstd::exp<E_ITERATIONS>(cstd::log<E_ITERATIONS, L_ITERATIONS>(
x) * y);
240 template<
int ITERATIONS>
241 [[nodiscard]] constexpr
double exp2(
double x)
246 [[nodiscard]] constexpr
double round(
double x)
248 return (
x >= 0) ? int(
x + 0.5)
252 [[nodiscard]] constexpr
float round(
float x)
254 return (
x >= 0) ? int(
x + 0.5f)
258 [[nodiscard]] constexpr
double sqrt(
double x)
263 while (curr != prev) {
265 curr = 0.5 * (curr +
x / curr);
constexpr double pow(double x, double y)
constexpr double log(double x)
constexpr float round(float x)
constexpr double sin_iter(double x)
constexpr double simple_fmod(double x, double y)
constexpr double exp2(double x)
constexpr double sqrt(double x)
constexpr double round(double x)
constexpr double exp(double x)
constexpr double cos_iter(double x)
constexpr double ipow(double x, int i)
constexpr double log10(double x)
constexpr double sin(double x)
constexpr double cos(double x)
constexpr double log2(double x)
constexpr double upow(double x, unsigned u)
constexpr KeyMatrixPosition x
Keyboard bindings.
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.
constexpr auto xrange(T e)