Use std::numbers constants
Part of modernizing to C++20.
Bug: None
No-IWYU: Other cleanup
Change-Id: I2c53789d845486436f37c887b216e7d502c915ac
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/392104
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44662}
diff --git a/audio/audio_state_unittest.cc b/audio/audio_state_unittest.cc
index 6a98bdd..c886a13 100644
--- a/audio/audio_state_unittest.cc
+++ b/audio/audio_state_unittest.cc
@@ -11,6 +11,7 @@
#include "audio/audio_state.h"
#include <memory>
+#include <numbers>
#include <utility>
#include <vector>
@@ -150,7 +151,7 @@
const int samples_per_channel = sample_rate_hz / 100;
std::vector<int16_t> audio_data(samples_per_channel * num_channels, 0);
// Fill the first channel with a 1kHz sine wave.
- const float inc = (2 * 3.14159265f * 1000) / sample_rate_hz;
+ const float inc = (2 * std::numbers::pi_v<float> * 1000) / sample_rate_hz;
float w = 0.f;
for (int i = 0; i < samples_per_channel; ++i) {
audio_data[i * num_channels] = static_cast<int16_t>(32767.f * std::sin(w));
diff --git a/common_audio/window_generator.cc b/common_audio/window_generator.cc
index da5603d..7c33d25 100644
--- a/common_audio/window_generator.cc
+++ b/common_audio/window_generator.cc
@@ -14,6 +14,7 @@
#include <cmath>
#include <complex>
+#include <numbers>
#include "rtc_base/checks.h"
@@ -41,7 +42,7 @@
RTC_CHECK(window != nullptr);
for (int i = 0; i < length; ++i) {
window[i] =
- 0.5f * (1 - cosf(2 * static_cast<float>(M_PI) * i / (length - 1)));
+ 0.5f * (1 - cosf(2 * std::numbers::pi_v<float> * i / (length - 1)));
}
}
@@ -56,7 +57,7 @@
for (size_t i = 0; i <= half; ++i) {
complex<float> r = (4.0f * i) / length - 1.0f;
- sum += I0(static_cast<float>(M_PI) * alpha * sqrt(1.0f - r * r)).real();
+ sum += I0(std::numbers::pi_v<float> * alpha * sqrt(1.0f - r * r)).real();
window[i] = sum;
}
for (size_t i = length - 1; i >= half; --i) {
diff --git a/modules/audio_coding/neteq/dtmf_tone_generator_unittest.cc b/modules/audio_coding/neteq/dtmf_tone_generator_unittest.cc
index 10e4c21..7a7d65a 100644
--- a/modules/audio_coding/neteq/dtmf_tone_generator_unittest.cc
+++ b/modules/audio_coding/neteq/dtmf_tone_generator_unittest.cc
@@ -15,6 +15,7 @@
#include <math.h>
#include <cstddef>
+#include <numbers>
#include "common_audio/include/audio_util.h"
#include "modules/audio_coding/neteq/audio_multi_vector.h"
@@ -46,7 +47,7 @@
double f1 = kLowFreqHz[event];
double f2 = kHighFreqHz[event];
- const double pi = 3.14159265358979323846;
+ const double pi = std::numbers::pi;
for (int n = 0; n < kNumSamples; ++n) {
double x = k3dbAttenuation * sin(2.0 * pi * f1 / fs_hz * (-n - 1)) +
diff --git a/modules/audio_mixer/sine_wave_generator.cc b/modules/audio_mixer/sine_wave_generator.cc
index deb8846..be3dd0c 100644
--- a/modules/audio_mixer/sine_wave_generator.cc
+++ b/modules/audio_mixer/sine_wave_generator.cc
@@ -13,12 +13,14 @@
#include <math.h>
#include <stddef.h>
+#include <numbers>
+
#include "rtc_base/numerics/safe_conversions.h"
namespace webrtc {
namespace {
-constexpr float kPi = 3.14159265f;
+constexpr float kPi = std::numbers::pi_v<float>;
} // namespace
void SineWaveGenerator::GenerateNextFrame(AudioFrame* frame) {
diff --git a/modules/audio_processing/aec3/comfort_noise_generator.cc b/modules/audio_processing/aec3/comfort_noise_generator.cc
index ed643f4..17a3b70 100644
--- a/modules/audio_processing/aec3/comfort_noise_generator.cc
+++ b/modules/audio_processing/aec3/comfort_noise_generator.cc
@@ -21,6 +21,7 @@
#include <cmath>
#include <cstdint>
#include <functional>
+#include <numbers>
#include <numeric>
#include "common_audio/signal_processing/include/signal_processing_library.h"
@@ -31,6 +32,8 @@
namespace {
+using std::numbers::sqrt2_v;
+
// Computes the noise floor value that matches a WGN input of noise_floor_dbfs.
float GetNoiseFloorFactor(float noise_floor_dbfs) {
// kdBfsNormalization = 20.f*log10(32768.f).
@@ -39,14 +42,16 @@
}
// Table of sqrt(2) * sin(2*pi*i/32).
+// clang-format off
constexpr float kSqrt2Sin[32] = {
+0.0000000f, +0.2758994f, +0.5411961f, +0.7856950f, +1.0000000f,
- +1.1758756f, +1.3065630f, +1.3870398f, +1.4142136f, +1.3870398f,
+ +1.1758756f, +1.3065630f, +1.3870398f, +sqrt2_v<float>, +1.3870398f,
+1.3065630f, +1.1758756f, +1.0000000f, +0.7856950f, +0.5411961f,
+0.2758994f, +0.0000000f, -0.2758994f, -0.5411961f, -0.7856950f,
- -1.0000000f, -1.1758756f, -1.3065630f, -1.3870398f, -1.4142136f,
+ -1.0000000f, -1.1758756f, -1.3065630f, -1.3870398f, -sqrt2_v<float>,
-1.3870398f, -1.3065630f, -1.1758756f, -1.0000000f, -0.7856950f,
-0.5411961f, -0.2758994f};
+// clang-format on
void GenerateComfortNoise(Aec3Optimization optimization,
const std::array<float, kFftLengthBy2Plus1>& N2,
diff --git a/modules/audio_processing/aec3/decimator_unittest.cc b/modules/audio_processing/aec3/decimator_unittest.cc
index 3ff4294..2c6d96d 100644
--- a/modules/audio_processing/aec3/decimator_unittest.cc
+++ b/modules/audio_processing/aec3/decimator_unittest.cc
@@ -16,6 +16,7 @@
#include <array>
#include <cmath>
#include <cstring>
+#include <numbers>
#include <numeric>
#include <string>
#include <vector>
@@ -35,7 +36,7 @@
}
constexpr size_t kDownSamplingFactors[] = {2, 4, 8};
-constexpr float kPi = 3.141592f;
+constexpr float kPi = std::numbers::pi_v<float>;
constexpr size_t kNumStartupBlocks = 50;
constexpr size_t kNumBlocks = 1000;
diff --git a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
index e51be2f..9ef6040 100644
--- a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
+++ b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
@@ -14,6 +14,7 @@
#include <array>
#include <cmath>
+#include <numbers>
#include <vector>
#include "api/array_view.h"
@@ -29,7 +30,7 @@
namespace webrtc {
namespace {
-constexpr float kPi = 3.141592f;
+constexpr float kPi = std::numbers::pi_v<float>;
void ProduceSinusoidInNoise(int sample_rate_hz,
size_t sinusoid_channel,
diff --git a/modules/audio_processing/aec3/suppression_filter_unittest.cc b/modules/audio_processing/aec3/suppression_filter_unittest.cc
index 464f5cf..8ecc7ec 100644
--- a/modules/audio_processing/aec3/suppression_filter_unittest.cc
+++ b/modules/audio_processing/aec3/suppression_filter_unittest.cc
@@ -14,6 +14,7 @@
#include <algorithm>
#include <cmath>
+#include <numbers>
#include <numeric>
#include "test/gtest.h"
@@ -21,7 +22,7 @@
namespace webrtc {
namespace {
-constexpr float kPi = 3.141592f;
+constexpr float kPi = std::numbers::pi_v<float>;
void ProduceSinusoid(int sample_rate_hz,
float sinusoidal_frequency_hz,
diff --git a/modules/audio_processing/agc/utility.cc b/modules/audio_processing/agc/utility.cc
index 2a87e5c..b8fa360 100644
--- a/modules/audio_processing/agc/utility.cc
+++ b/modules/audio_processing/agc/utility.cc
@@ -12,9 +12,11 @@
#include <math.h>
+#include <numbers>
+
namespace webrtc {
-static const double kLog10 = 2.30258509299;
+static const double kLog10 = std::numbers::ln10;
static const double kLinear2DbScale = 20.0 / kLog10;
static const double kLinear2LoudnessScale = 13.4 / kLog10;
diff --git a/modules/audio_processing/agc2/agc2_testing_common.cc b/modules/audio_processing/agc2/agc2_testing_common.cc
index 8f3e9db..b9d0492 100644
--- a/modules/audio_processing/agc2/agc2_testing_common.cc
+++ b/modules/audio_processing/agc2/agc2_testing_common.cc
@@ -12,6 +12,8 @@
#include <math.h>
+#include <numbers>
+
#include "rtc_base/checks.h"
namespace webrtc {
@@ -56,7 +58,7 @@
}
float SineGenerator::operator()() {
- constexpr float kPi = 3.1415926536f;
+ constexpr float kPi = std::numbers::pi_v<float>;
x_radians_ += frequency_hz_ / sample_rate_hz_ * 2 * kPi;
if (x_radians_ >= 2 * kPi) {
x_radians_ -= 2 * kPi;
diff --git a/modules/audio_processing/ns/fast_math.cc b/modules/audio_processing/ns/fast_math.cc
index 72f6fb2..7b8fe1f 100644
--- a/modules/audio_processing/ns/fast_math.cc
+++ b/modules/audio_processing/ns/fast_math.cc
@@ -13,6 +13,8 @@
#include <math.h>
#include <stdint.h>
+#include <numbers>
+
#include "rtc_base/checks.h"
namespace webrtc {
@@ -53,7 +55,7 @@
}
float LogApproximation(float x) {
- constexpr float kLogOf2 = 0.69314718056f;
+ constexpr float kLogOf2 = std::numbers::ln2_v<float>;
return FastLog2f(x) * kLogOf2;
}
@@ -64,7 +66,7 @@
}
float ExpApproximation(float x) {
- constexpr float kLog10Ofe = 0.4342944819f;
+ constexpr float kLog10Ofe = std::numbers::log10e_v<float>;
return PowApproximation(10.f, x * kLog10Ofe);
}
diff --git a/modules/audio_processing/ns/noise_estimator.cc b/modules/audio_processing/ns/noise_estimator.cc
index bf21d38..00b647c 100644
--- a/modules/audio_processing/ns/noise_estimator.cc
+++ b/modules/audio_processing/ns/noise_estimator.cc
@@ -14,6 +14,7 @@
#include <array>
#include <cstddef>
#include <cstdint>
+#include <numbers>
#include "api/array_view.h"
#include "modules/audio_processing/ns/fast_math.h"
@@ -25,10 +26,14 @@
namespace {
+using std::numbers::ln10_v;
+
// Log(i).
+// clang-format off
constexpr std::array<float, 129> log_table = {
0.f, 0.f, 0.f, 0.f, 0.f, 1.609438f, 1.791759f,
- 1.945910f, 2.079442f, 2.197225f, 2.302585f, 2.397895f, 2.484907f, 2.564949f,
+ 1.945910f, 2.079442f, 2.197225f, ln10_v<float>, 2.397895f, 2.484907f,
+ 2.564949f,
2.639057f, 2.708050f, 2.772589f, 2.833213f, 2.890372f, 2.944439f, 2.995732f,
3.044522f, 3.091043f, 3.135494f, 3.178054f, 3.218876f, 3.258097f, 3.295837f,
3.332205f, 3.367296f, 3.401197f, 3.433987f, 3.465736f, 3.496507f, 3.526361f,
@@ -46,6 +51,7 @@
4.718499f, 4.727388f, 4.736198f, 4.744932f, 4.753591f, 4.762174f, 4.770685f,
4.779124f, 4.787492f, 4.795791f, 4.804021f, 4.812184f, 4.820282f, 4.828314f,
4.836282f, 4.844187f, 4.852030f};
+// clang-format on
} // namespace
diff --git a/modules/audio_processing/three_band_filter_bank.cc b/modules/audio_processing/three_band_filter_bank.cc
index d69db9b..45b44a7 100644
--- a/modules/audio_processing/three_band_filter_bank.cc
+++ b/modules/audio_processing/three_band_filter_bank.cc
@@ -33,6 +33,7 @@
#include "modules/audio_processing/three_band_filter_bank.h"
#include <array>
+#include <numbers>
#include "rtc_base/checks.h"
@@ -88,17 +89,21 @@
constexpr int kZeroFilterIndex1 = 3;
constexpr int kZeroFilterIndex2 = 9;
+constexpr float kSqrt3 = std::numbers::sqrt3_v<float>;
+
+// clang-format off
const float kDctModulation[ThreeBandFilterBank::kNumNonZeroFilters][kDctSize] =
{{2.f, 2.f, 2.f},
- {1.73205077f, 0.f, -1.73205077f},
+ {kSqrt3, 0.f, -kSqrt3},
{1.f, -2.f, 1.f},
{-1.f, 2.f, -1.f},
- {-1.73205077f, 0.f, 1.73205077f},
+ {-kSqrt3, 0.f, kSqrt3},
{-2.f, -2.f, -2.f},
- {-1.73205077f, 0.f, 1.73205077f},
+ {-kSqrt3, 0.f, kSqrt3},
{-1.f, 2.f, -1.f},
{1.f, -2.f, 1.f},
- {1.73205077f, 0.f, -1.73205077f}};
+ {kSqrt3, 0.f, -kSqrt3}};
+// clang-format on
// Filters the input signal `in` with the filter `filter` using a shift by
// `in_shift`, taking into account the previous state.
diff --git a/rtc_base/numerics/event_based_exponential_moving_average.cc b/rtc_base/numerics/event_based_exponential_moving_average.cc
index 27b2066..419902d 100644
--- a/rtc_base/numerics/event_based_exponential_moving_average.cc
+++ b/rtc_base/numerics/event_based_exponential_moving_average.cc
@@ -13,6 +13,7 @@
#include <cmath>
#include <cstdint>
#include <limits>
+#include <numbers>
#include "rtc_base/checks.h"
@@ -35,7 +36,7 @@
}
void EventBasedExponentialMovingAverage::SetHalfTime(int half_time) {
- tau_ = static_cast<double>(half_time) / log(2);
+ tau_ = static_cast<double>(half_time) / std::numbers::ln2;
Reset();
}
diff --git a/rtc_base/numerics/percentile_filter_unittest.cc b/rtc_base/numerics/percentile_filter_unittest.cc
index d6baa32..d6826f4 100644
--- a/rtc_base/numerics/percentile_filter_unittest.cc
+++ b/rtc_base/numerics/percentile_filter_unittest.cc
@@ -15,6 +15,7 @@
#include <array>
#include <climits>
#include <cstdint>
+#include <numbers>
#include <random>
#include "absl/algorithm/container.h"
@@ -58,10 +59,10 @@
TEST(PercentileFilterTest, MedianFilterDouble) {
PercentileFilter<double> filter(0.5f);
- filter.Insert(2.71828);
- filter.Insert(3.14159);
- filter.Insert(1.41421);
- EXPECT_EQ(2.71828, filter.GetPercentileValue());
+ filter.Insert(std::numbers::e);
+ filter.Insert(std::numbers::pi);
+ filter.Insert(std::numbers::sqrt2);
+ EXPECT_FLOAT_EQ(std::numbers::e, filter.GetPercentileValue());
}
TEST(PercentileFilterTest, MedianFilterInt) {
diff --git a/rtc_base/random.cc b/rtc_base/random.cc
index 55b8749..28e48f0 100644
--- a/rtc_base/random.cc
+++ b/rtc_base/random.cc
@@ -11,6 +11,8 @@
#include <math.h>
+#include <numbers>
+
#include "rtc_base/checks.h"
#include "rtc_base/numerics/safe_conversions.h"
@@ -71,7 +73,7 @@
// interval (0, 1]. Note that we rely on NextOutput to generate integers
// in the range [1, 2^64-1]. Normally this behavior is a bit frustrating,
// but here it is exactly what we need.
- const double kPi = 3.14159265358979323846;
+ const double kPi = std::numbers::pi;
double u1 = static_cast<double>(NextOutput()) /
static_cast<double>(0xFFFFFFFFFFFFFFFFull);
double u2 = static_cast<double>(NextOutput()) /
diff --git a/rtc_base/random_unittest.cc b/rtc_base/random_unittest.cc
index 4eb6f75..ffcd3ed 100644
--- a/rtc_base/random_unittest.cc
+++ b/rtc_base/random_unittest.cc
@@ -13,6 +13,7 @@
#include <math.h>
#include <limits>
+#include <numbers>
#include <vector>
#include "rtc_base/numerics/math_utils.h" // unsigned difference
@@ -286,7 +287,7 @@
}
}
- const double kPi = 3.14159265358979323846;
+ const double kPi = std::numbers::pi;
const double kScale = 1 / (kStddev * sqrt(2.0 * kPi));
const double kDiv = -2.0 * kStddev * kStddev;
for (int n = 0; n < kBuckets; ++n) {