diff --git a/libcxx/include/__chrono/formatter.h b/libcxx/include/__chrono/formatter.h index c1b57209b938d..8667fa4c4ec4b 100644 --- a/libcxx/include/__chrono/formatter.h +++ b/libcxx/include/__chrono/formatter.h @@ -49,7 +49,6 @@ # include <__format/write_escaped.h> # include <__memory/addressof.h> # include <__type_traits/is_specialization.h> -# include # include # include # include diff --git a/libcxx/include/__format/formatter_floating_point.h b/libcxx/include/__format/formatter_floating_point.h index e04fffb683c3a..f6806eefcc1c4 100644 --- a/libcxx/include/__format/formatter_floating_point.h +++ b/libcxx/include/__format/formatter_floating_point.h @@ -31,12 +31,12 @@ #include <__format/formatter_output.h> #include <__format/parser_std_format_spec.h> #include <__iterator/concepts.h> +#include <__math/traits.h> #include <__memory/allocator.h> #include <__system_error/errc.h> #include <__type_traits/conditional.h> #include <__utility/move.h> #include <__utility/unreachable.h> -#include #if _LIBCPP_HAS_LOCALIZATION # include <__locale> @@ -636,10 +636,10 @@ _LIBCPP_HIDE_FROM_ABI auto __write_using_trailing_zeros( template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator __format_floating_point(_Tp __value, _FormatContext& __ctx, __format_spec::__parsed_specifications<_CharT> __specs) { - bool __negative = std::signbit(__value); + bool __negative = __math::signbit(__value); - if (!std::isfinite(__value)) [[unlikely]] - return __formatter::__format_floating_point_non_finite(__ctx.out(), __specs, __negative, std::isnan(__value)); + if (!__math::isfinite(__value)) [[unlikely]] + return __formatter::__format_floating_point_non_finite(__ctx.out(), __specs, __negative, __math::isnan(__value)); // Depending on the std-format-spec string the sign and the value // might not be outputted together: diff --git a/libcxx/include/__random/binomial_distribution.h b/libcxx/include/__random/binomial_distribution.h index 9538c15e2dc97..41577eb5edd03 100644 --- a/libcxx/include/__random/binomial_distribution.h +++ b/libcxx/include/__random/binomial_distribution.h @@ -10,9 +10,10 @@ #define _LIBCPP___RANDOM_BINOMIAL_DISTRIBUTION_H #include <__config> +#include <__math/exponential_functions.h> +#include <__math/logarithms.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -115,9 +116,9 @@ template binomial_distribution<_IntType>::param_type::param_type(result_type __t, double __p) : __t_(__t), __p_(__p) { if (0 < __p_ && __p_ < 1) { __r0_ = static_cast((__t_ + 1) * __p_); - __pr_ = std::exp( + __pr_ = __math::exp( std::__libcpp_lgamma(__t_ + 1.) - std::__libcpp_lgamma(__r0_ + 1.) - std::__libcpp_lgamma(__t_ - __r0_ + 1.) + - __r0_ * std::log(__p_) + (__t_ - __r0_) * std::log(1 - __p_)); + __r0_ * __math::log(__p_) + (__t_ - __r0_) * __math::log(1 - __p_)); __odds_ratio_ = __p_ / (1 - __p_); } } diff --git a/libcxx/include/__random/cauchy_distribution.h b/libcxx/include/__random/cauchy_distribution.h index bd341427a1523..02391f7bd3d54 100644 --- a/libcxx/include/__random/cauchy_distribution.h +++ b/libcxx/include/__random/cauchy_distribution.h @@ -10,9 +10,9 @@ #define _LIBCPP___RANDOM_CAUCHY_DISTRIBUTION_H #include <__config> +#include <__math/trigonometric_functions.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #include @@ -100,7 +100,7 @@ inline _RealType cauchy_distribution<_RealType>::operator()(_URNG& __g, const pa static_assert(__libcpp_random_is_valid_urng<_URNG>::value, ""); uniform_real_distribution __gen; // purposefully let tan arg get as close to pi/2 as it wants, tan will return a finite - return __p.a() + __p.b() * std::tan(3.1415926535897932384626433832795 * __gen(__g)); + return __p.a() + __p.b() * __math::tan(3.1415926535897932384626433832795 * __gen(__g)); } template diff --git a/libcxx/include/__random/clamp_to_integral.h b/libcxx/include/__random/clamp_to_integral.h index d9bfd31b7f012..8328d35c768ec 100644 --- a/libcxx/include/__random/clamp_to_integral.h +++ b/libcxx/include/__random/clamp_to_integral.h @@ -10,7 +10,10 @@ #define _LIBCPP___RANDOM_CLAMP_TO_INTEGRAL_H #include <__config> -#include +#include <__math/rounding_functions.h> +#include <__type_traits/is_floating_point.h> +#include <__type_traits/is_integral.h> +#include <__type_traits/is_same.h> #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -44,7 +47,7 @@ template _LIBCPP_HIDE_FROM_ABI _IntT __clamp_to_integral(_RealT __r) _NOEXCEPT { using _Lim = numeric_limits<_IntT>; const _IntT __max_val = __max_representable_int_for_float<_IntT, _RealT>(); - if (__r >= ::nextafter(static_cast<_RealT>(__max_val), INFINITY)) { + if (__r >= __math::nextafter(static_cast<_RealT>(__max_val), numeric_limits<_RealT>::infinity())) { return _Lim::max(); } else if (__r <= _Lim::lowest()) { return _Lim::min(); diff --git a/libcxx/include/__random/exponential_distribution.h b/libcxx/include/__random/exponential_distribution.h index e0e38841172f9..9574041c6ab09 100644 --- a/libcxx/include/__random/exponential_distribution.h +++ b/libcxx/include/__random/exponential_distribution.h @@ -10,10 +10,10 @@ #define _LIBCPP___RANDOM_EXPONENTIAL_DISTRIBUTION_H #include <__config> +#include <__math/logarithms.h> #include <__random/generate_canonical.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #include @@ -96,7 +96,7 @@ template template _RealType exponential_distribution<_RealType>::operator()(_URNG& __g, const param_type& __p) { static_assert(__libcpp_random_is_valid_urng<_URNG>::value, ""); - return -std::log(result_type(1) - std::generate_canonical::digits>(__g)) / + return -__math::log(result_type(1) - std::generate_canonical::digits>(__g)) / __p.lambda(); } diff --git a/libcxx/include/__random/extreme_value_distribution.h b/libcxx/include/__random/extreme_value_distribution.h index 5505f93274f5c..dbace0379bcb1 100644 --- a/libcxx/include/__random/extreme_value_distribution.h +++ b/libcxx/include/__random/extreme_value_distribution.h @@ -10,9 +10,9 @@ #define _LIBCPP___RANDOM_EXTREME_VALUE_DISTRIBUTION_H #include <__config> +#include <__math/logarithms.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #include @@ -100,7 +100,7 @@ template template _RealType extreme_value_distribution<_RealType>::operator()(_URNG& __g, const param_type& __p) { static_assert(__libcpp_random_is_valid_urng<_URNG>::value, ""); - return __p.a() - __p.b() * std::log(-std::log(1 - uniform_real_distribution()(__g))); + return __p.a() - __p.b() * __math::log(-__math::log(1 - uniform_real_distribution()(__g))); } template diff --git a/libcxx/include/__random/gamma_distribution.h b/libcxx/include/__random/gamma_distribution.h index 986e42c1c7f5b..4aee4fb9ba06a 100644 --- a/libcxx/include/__random/gamma_distribution.h +++ b/libcxx/include/__random/gamma_distribution.h @@ -10,10 +10,12 @@ #define _LIBCPP___RANDOM_GAMMA_DISTRIBUTION_H #include <__config> +#include <__math/exponential_functions.h> +#include <__math/logarithms.h> +#include <__math/roots.h> #include <__random/exponential_distribution.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #include @@ -114,13 +116,13 @@ _RealType gamma_distribution<_RealType>::operator()(_URNG& __g, const param_type const result_type __v = __gen(__g); const result_type __w = __u * (1 - __u); if (__w != 0) { - const result_type __y = std::sqrt(__c / __w) * (__u - result_type(0.5)); + const result_type __y = __math::sqrt(__c / __w) * (__u - result_type(0.5)); __x = __b + __y; if (__x >= 0) { const result_type __z = 64 * __w * __w * __w * __v * __v; if (__z <= 1 - 2 * __y * __y / __x) break; - if (std::log(__z) <= 2 * (__b * std::log(__x / __b) - __y)) + if (__math::log(__z) <= 2 * (__b * __math::log(__x / __b) - __y)) break; } } @@ -131,12 +133,12 @@ _RealType gamma_distribution<_RealType>::operator()(_URNG& __g, const param_type const result_type __u = __gen(__g); const result_type __es = __egen(__g); if (__u <= 1 - __a) { - __x = std::pow(__u, 1 / __a); + __x = __math::pow(__u, 1 / __a); if (__x <= __es) break; } else { - const result_type __e = -std::log((1 - __u) / __a); - __x = std::pow(1 - __a + __a * __e, 1 / __a); + const result_type __e = -__math::log((1 - __u) / __a); + __x = __math::pow(1 - __a + __a * __e, 1 / __a); if (__x <= __e + __es) break; } diff --git a/libcxx/include/__random/lognormal_distribution.h b/libcxx/include/__random/lognormal_distribution.h index d8724f8bc5cec..7bca2d0f93a78 100644 --- a/libcxx/include/__random/lognormal_distribution.h +++ b/libcxx/include/__random/lognormal_distribution.h @@ -10,9 +10,9 @@ #define _LIBCPP___RANDOM_LOGNORMAL_DISTRIBUTION_H #include <__config> +#include <__math/exponential_functions.h> #include <__random/is_valid.h> #include <__random/normal_distribution.h> -#include #include #include @@ -69,13 +69,13 @@ class _LIBCPP_TEMPLATE_VIS lognormal_distribution { // generating functions template _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) { - return std::exp(__nd_(__g)); + return __math::exp(__nd_(__g)); } template _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) { typename normal_distribution::param_type __pn(__p.m(), __p.s()); - return std::exp(__nd_(__g, __pn)); + return __math::exp(__nd_(__g, __pn)); } // property functions diff --git a/libcxx/include/__random/normal_distribution.h b/libcxx/include/__random/normal_distribution.h index 889f189e4161b..7789c81b5e406 100644 --- a/libcxx/include/__random/normal_distribution.h +++ b/libcxx/include/__random/normal_distribution.h @@ -10,9 +10,10 @@ #define _LIBCPP___RANDOM_NORMAL_DISTRIBUTION_H #include <__config> +#include <__math/logarithms.h> +#include <__math/roots.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> -#include #include #include @@ -123,7 +124,7 @@ _RealType normal_distribution<_RealType>::operator()(_URNG& __g, const param_typ __v = __uni(__g); __s = __u * __u + __v * __v; } while (__s > 1 || __s == 0); - result_type __fp = std::sqrt(-2 * std::log(__s) / __s); + result_type __fp = __math::sqrt(-2 * __math::log(__s) / __s); __v_ = __v * __fp; __v_hot_ = true; __up = __u * __fp; diff --git a/libcxx/include/__random/piecewise_linear_distribution.h b/libcxx/include/__random/piecewise_linear_distribution.h index 0d14f882cbbb2..7e09255fbf212 100644 --- a/libcxx/include/__random/piecewise_linear_distribution.h +++ b/libcxx/include/__random/piecewise_linear_distribution.h @@ -12,11 +12,11 @@ #include <__algorithm/upper_bound.h> #include <__config> #include <__cstddef/ptrdiff_t.h> +#include <__math/roots.h> #include <__random/is_valid.h> #include <__random/uniform_real_distribution.h> #include <__vector/comparison.h> #include <__vector/vector.h> -#include #include #include @@ -256,7 +256,8 @@ _RealType piecewise_linear_distribution<_RealType>::operator()(_URNG& __g, const return __u / __dk + __bk; const result_type __bk1 = __p.__b_[__k + 1]; const result_type __deltab = __bk1 - __bk; - return (__bk * __dk1 - __bk1 * __dk + std::sqrt(__deltab * (__deltab * __dk * __dk + 2 * __deltad * __u))) / __deltad; + return (__bk * __dk1 - __bk1 * __dk + __math::sqrt(__deltab * (__deltab * __dk * __dk + 2 * __deltad * __u))) / + __deltad; } template diff --git a/libcxx/include/__random/poisson_distribution.h b/libcxx/include/__random/poisson_distribution.h index 61a092ef9dd4d..c615c2945eed9 100644 --- a/libcxx/include/__random/poisson_distribution.h +++ b/libcxx/include/__random/poisson_distribution.h @@ -10,12 +10,17 @@ #define _LIBCPP___RANDOM_POISSON_DISTRIBUTION_H #include <__config> +#include <__math/exponential_functions.h> +#include <__math/logarithms.h> +#include <__math/roots.h> +#include <__math/rounding_functions.h> +#include <__math/traits.h> #include <__random/clamp_to_integral.h> #include <__random/exponential_distribution.h> #include <__random/is_valid.h> #include <__random/normal_distribution.h> #include <__random/uniform_real_distribution.h> -#include +#include #include #include @@ -107,11 +112,11 @@ poisson_distribution<_IntType>::param_type::param_type(double __mean) // According to the standard `inf` is a valid input, but it causes the // distribution to hang, so we replace it with the maximum representable // mean. - : __mean_(isinf(__mean) ? numeric_limits::max() : __mean) { + : __mean_(__math::isinf(__mean) ? numeric_limits::max() : __mean) { if (__mean_ < 10) { __s_ = 0; __d_ = 0; - __l_ = std::exp(-__mean_); + __l_ = __math::exp(-__mean_); __omega_ = 0; __c3_ = 0; __c2_ = 0; @@ -119,9 +124,9 @@ poisson_distribution<_IntType>::param_type::param_type(double __mean) __c0_ = 0; __c_ = 0; } else { - __s_ = std::sqrt(__mean_); + __s_ = __math::sqrt(__mean_); __d_ = 6 * __mean_ * __mean_; - __l_ = std::trunc(__mean_ - 1.1484); + __l_ = __math::trunc(__mean_ - 1.1484); __omega_ = .3989423 / __s_; double __b1 = .4166667E-1 / __mean_; double __b2 = .3 * __b1 * __b1; @@ -148,7 +153,7 @@ _IntType poisson_distribution<_IntType>::operator()(_URNG& __urng, const param_t double __g = __pr.__mean_ + __pr.__s_ * normal_distribution()(__urng); double __u; if (__g > 0) { - __tx = std::trunc(__g); + __tx = __math::trunc(__g); if (__tx >= __pr.__l_) return std::__clamp_to_integral(__tx); __difmuk = __pr.__mean_ - __tx; @@ -167,7 +172,7 @@ _IntType poisson_distribution<_IntType>::operator()(_URNG& __urng, const param_t __u += __u - 1; __t = 1.8 + (__u < 0 ? -__e : __e); } while (__t <= -.6744); - __tx = std::trunc(__pr.__mean_ + __pr.__s_ * __t); + __tx = __math::trunc(__pr.__mean_ + __pr.__s_ * __t); __difmuk = __pr.__mean_ - __tx; __using_exp_dist = true; } @@ -176,13 +181,13 @@ _IntType poisson_distribution<_IntType>::operator()(_URNG& __urng, const param_t if (__tx < 10 && __tx >= 0) { const double __fac[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880}; __px = -__pr.__mean_; - __py = std::pow(__pr.__mean_, (double)__tx) / __fac[static_cast(__tx)]; + __py = __math::pow(__pr.__mean_, (double)__tx) / __fac[static_cast(__tx)]; } else { double __del = .8333333E-1 / __tx; __del -= 4.8 * __del * __del * __del; double __v = __difmuk / __tx; if (std::abs(__v) > 0.25) - __px = __tx * std::log(1 + __v) - __difmuk - __del; + __px = __tx * __math::log(1 + __v) - __difmuk - __del; else __px = __tx * __v * __v * (((((((.1250060 * __v + -.1384794) * __v + .1421878) * __v + -.1661269) * __v + .2000118) * __v + @@ -192,17 +197,17 @@ _IntType poisson_distribution<_IntType>::operator()(_URNG& __urng, const param_t __v + -.5) - __del; - __py = .3989423 / std::sqrt(__tx); + __py = .3989423 / __math::sqrt(__tx); } double __r = (0.5 - __difmuk) / __pr.__s_; double __r2 = __r * __r; double __fx = -0.5 * __r2; double __fy = __pr.__omega_ * (((__pr.__c3_ * __r2 + __pr.__c2_) * __r2 + __pr.__c1_) * __r2 + __pr.__c0_); if (__using_exp_dist) { - if (__pr.__c_ * std::abs(__u) <= __py * std::exp(__px + __e) - __fy * std::exp(__fx + __e)) + if (__pr.__c_ * std::abs(__u) <= __py * __math::exp(__px + __e) - __fy * __math::exp(__fx + __e)) break; } else { - if (__fy - __u * __fy <= __py * std::exp(__px - __fx)) + if (__fy - __u * __fy <= __py * __math::exp(__px - __fx)) break; } } diff --git a/libcxx/include/__random/student_t_distribution.h b/libcxx/include/__random/student_t_distribution.h index 110a856ee6586..9b32ab6457875 100644 --- a/libcxx/include/__random/student_t_distribution.h +++ b/libcxx/include/__random/student_t_distribution.h @@ -10,10 +10,10 @@ #define _LIBCPP___RANDOM_STUDENT_T_DISTRIBUTION_H #include <__config> +#include <__math/roots.h> #include <__random/gamma_distribution.h> #include <__random/is_valid.h> #include <__random/normal_distribution.h> -#include #include #include @@ -96,7 +96,7 @@ template _RealType student_t_distribution<_RealType>::operator()(_URNG& __g, const param_type& __p) { static_assert(__libcpp_random_is_valid_urng<_URNG>::value, ""); gamma_distribution __gd(__p.n() * .5, 2); - return __nd_(__g) * std::sqrt(__p.n() / __gd(__g)); + return __nd_(__g) * __math::sqrt(__p.n() / __gd(__g)); } template diff --git a/libcxx/include/__random/weibull_distribution.h b/libcxx/include/__random/weibull_distribution.h index aa3d63c8e8663..5738d0068eb3c 100644 --- a/libcxx/include/__random/weibull_distribution.h +++ b/libcxx/include/__random/weibull_distribution.h @@ -10,9 +10,9 @@ #define _LIBCPP___RANDOM_WEIBULL_DISTRIBUTION_H #include <__config> +#include <__math/exponential_functions.h> #include <__random/exponential_distribution.h> #include <__random/is_valid.h> -#include #include #include @@ -75,7 +75,7 @@ class _LIBCPP_TEMPLATE_VIS weibull_distribution { } template _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) { - return __p.b() * std::pow(exponential_distribution()(__g), 1 / __p.a()); + return __p.b() * __math::pow(exponential_distribution()(__g), 1 / __p.a()); } // property functions