From 2adbf35ffe62828dc15cd900173e7154a8233e04 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Thu, 30 May 2024 10:27:46 +0200 Subject: [PATCH] Get rid of boost::math::constants::* in favor of std::numbers --- .../engine/map_matching/bayes_classifier.hpp | 6 ++--- .../map_matching/hidden_markov_model.hpp | 4 ++-- include/util/coordinate_calculation.hpp | 14 +++--------- include/util/trigonometry_table.hpp | 22 +++++++++---------- include/util/web_mercator.hpp | 4 ++-- src/util/coordinate_calculation.cpp | 3 +-- 6 files changed, 21 insertions(+), 32 deletions(-) diff --git a/include/engine/map_matching/bayes_classifier.hpp b/include/engine/map_matching/bayes_classifier.hpp index 5dd5813c3..7d89e3d64 100644 --- a/include/engine/map_matching/bayes_classifier.hpp +++ b/include/engine/map_matching/bayes_classifier.hpp @@ -6,7 +6,7 @@ #include #include -#include +#include namespace osrm::engine::map_matching { @@ -21,10 +21,8 @@ struct NormalDistribution // FIXME implement log-probability version since it's faster double Density(const double val) const { - using namespace boost::math::constants; - const double x = val - mean; - return 1.0 / (std::sqrt(two_pi()) * standard_deviation) * + return 1.0 / (std::sqrt(2 * std::numbers::pi) * standard_deviation) * std::exp(-x * x / (standard_deviation * standard_deviation)); } diff --git a/include/engine/map_matching/hidden_markov_model.hpp b/include/engine/map_matching/hidden_markov_model.hpp index 54505c8ec..f719b076e 100644 --- a/include/engine/map_matching/hidden_markov_model.hpp +++ b/include/engine/map_matching/hidden_markov_model.hpp @@ -4,7 +4,7 @@ #include "util/integer_range.hpp" #include -#include +#include #include @@ -14,7 +14,7 @@ namespace osrm::engine::map_matching { -static const double log_2_pi = std::log(2. * boost::math::constants::pi()); +static const double log_2_pi = std::log(2. * std::numbers::pi); static const double IMPOSSIBLE_LOG_PROB = -std::numeric_limits::infinity(); static const double MINIMAL_LOG_PROB = std::numeric_limits::lowest(); static const std::size_t INVALID_STATE = std::numeric_limits::max(); diff --git a/include/util/coordinate_calculation.hpp b/include/util/coordinate_calculation.hpp index 1013555ed..a67d5f1c8 100644 --- a/include/util/coordinate_calculation.hpp +++ b/include/util/coordinate_calculation.hpp @@ -3,7 +3,7 @@ #include "util/coordinate.hpp" -#include +#include #include #include @@ -23,17 +23,9 @@ const constexpr double RAD_TO_DEGREE = 1. / DEGREE_TO_RAD; // The IUGG value for the equatorial radius is 6378.137 km (3963.19 miles) const constexpr long double EARTH_RADIUS = 6372797.560856; -inline double degToRad(const double degree) -{ - using namespace boost::math::constants; - return degree * (pi() / 180.0); -} +inline double degToRad(const double degree) { return degree * (std::numbers::pi / 180.0); } -inline double radToDeg(const double radian) -{ - using namespace boost::math::constants; - return radian * (180.0 * (1. / pi())); -} +inline double radToDeg(const double radian) { return radian * (180.0 * (1. / std::numbers::pi)); } } // namespace detail const constexpr static double METERS_PER_DEGREE_LAT = 110567.0; diff --git a/include/util/trigonometry_table.hpp b/include/util/trigonometry_table.hpp index 412674960..6f5057be6 100644 --- a/include/util/trigonometry_table.hpp +++ b/include/util/trigonometry_table.hpp @@ -6,7 +6,7 @@ #include -#include +#include namespace osrm::util { @@ -359,22 +359,22 @@ constexpr unsigned short atan_table[4096] = { #ifdef _MSC_VER // TODO: remove as soon as boost allows C++14 features with Visual Studio const constexpr double SCALING_FACTOR = 4. / M_PI * 0xFFFF; #else -const constexpr double SCALING_FACTOR = 4. / boost::math::constants::pi() * 0xFFFF; +const constexpr double SCALING_FACTOR = 4. / std::numbers::pi * 0xFFFF; #endif inline double atan2_lookup(double y, double x) { - using namespace boost::math::constants; + static constexpr auto half_pi = std::numbers::pi * 0.5; if (std::abs(x) < std::numeric_limits::epsilon()) { if (y >= 0.) { - return half_pi(); + return half_pi; } else { - return -half_pi(); + return -half_pi; } } @@ -405,25 +405,25 @@ inline double atan2_lookup(double y, double x) case 0: break; case 1: - angle = pi() - angle; + angle = std::numbers::pi - angle; break; case 2: angle = -angle; break; case 3: - angle = -pi() + angle; + angle = -std::numbers::pi + angle; break; case 4: - angle = half_pi() - angle; + angle = half_pi - angle; break; case 5: - angle = half_pi() + angle; + angle = half_pi + angle; break; case 6: - angle = -half_pi() + angle; + angle = -half_pi + angle; break; case 7: - angle = -half_pi() - angle; + angle = -half_pi - angle; break; } return angle; diff --git a/include/util/web_mercator.hpp b/include/util/web_mercator.hpp index 0d428486b..c7fab1259 100644 --- a/include/util/web_mercator.hpp +++ b/include/util/web_mercator.hpp @@ -3,7 +3,7 @@ #include "util/coordinate.hpp" -#include +#include namespace osrm::util::web_mercator { @@ -14,7 +14,7 @@ const constexpr double RAD_TO_DEGREE = 1. / DEGREE_TO_RAD; // radius used by WGS84 const constexpr double EARTH_RADIUS_WGS84 = 6378137.0; // earth circumference devided by 2 -const constexpr double MAXEXTENT = EARTH_RADIUS_WGS84 * boost::math::constants::pi(); +const constexpr double MAXEXTENT = EARTH_RADIUS_WGS84 * std::numbers::pi; // ^ math functions are not constexpr since they have side-effects (setting errno) :( const constexpr double EPSG3857_MAX_LATITUDE = 85.051128779806592378; // 90(4*atan(exp(pi))/pi-1) const constexpr double MAX_LONGITUDE = 180.0; diff --git a/src/util/coordinate_calculation.cpp b/src/util/coordinate_calculation.cpp index 00c5efbf5..953873cb3 100644 --- a/src/util/coordinate_calculation.cpp +++ b/src/util/coordinate_calculation.cpp @@ -146,7 +146,6 @@ double bearing(const Coordinate coordinate_1, const Coordinate coordinate_2) double computeAngle(const Coordinate first, const Coordinate second, const Coordinate third) { - using namespace boost::math::constants; using namespace coordinate_calculation; if (first == second || second == third) @@ -163,7 +162,7 @@ double computeAngle(const Coordinate first, const Coordinate second, const Coord const double v2y = web_mercator::latToY(toFloating(third.lat)) - web_mercator::latToY(toFloating(second.lat)); - double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / pi(); + double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / std::numbers::pi; while (angle < 0.) {