numeric_constants

numeric_constants (수학 상수)

C++20부터 <numbers> 헤더의 std::numbers 네임스페이스에 수학 상수 변수 템플릿과 상수가 정의돼요. e, π, ln2, √2 같은 흔한 수학 상수들을 쓸 수 있어요.

출처: cppreference

본문

상수 (Constants) (since C++20)

<numbers> 헤더에 정의되어 있고, std::numbers 네임스페이스에 정의돼요.

이름
e_v 수학 상수 e
log2e_v log₂e
log10e_v log₁₀e
pi_v 수학 상수 π
inv_pi_v 1/π
inv_sqrtpi_v 1/√π
ln2_v ln 2
ln10_v ln 10
sqrt2_v √2
sqrt3_v √3
inv_sqrt3_v 1/√3
egamma_v 오일러-마스케로니 상수 γ
phi_v 황금비 Φ ((1+√5)/2)

<numbers> 헤더에 정의되어 있고, std::numbers 네임스페이스에 정의돼요.

이름
inline constexpr double e e_v<double> (상수)
inline constexpr double log2e log2e_v<double> (상수)
inline constexpr double log10e log10e_v<double> (상수)
inline constexpr double pi pi_v<double> (상수)
inline constexpr double inv_pi inv_pi_v<double> (상수)
inline constexpr double inv_sqrtpi inv_sqrtpi_v<double> (상수)
inline constexpr double ln2 ln2_v<double> (상수)
inline constexpr double ln10 ln10_v<double> (상수)
inline constexpr double sqrt2 sqrt2_v<double> (상수)
inline constexpr double sqrt3 sqrt3_v<double> (상수)
inline constexpr double inv_sqrt3 inv_sqrt3_v<double> (상수)
inline constexpr double egamma egamma_v<double> (상수)
inline constexpr double phi phi_v<double> (상수)

참고 (Notes)

수학 상수 변수 템플릿의 기본 템플릿을 인스턴스화하는 프로그램은 ill-formed예요.

표준 라이브러리는 모든 부동소수점 타입(즉 float, double, long double, 그리고 C++23부터 고정폭 부동소수점 타입)에 수학 상수 변수 템플릿을 특수화해요.

프로그램은 특수화가 프로그램 정의 타입에 의존한다면 수학 상수 변수 템플릿을 부분 또는 명시적으로 특수화할 수 있어요.

피처 테스트 매크로 표준 기능
__cpp_lib_math_constants 201907L (C++20) 수학 상수

예제 (Example)

이 코드를 실행해 봐요.

#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <numbers>
#include <string_view>

auto egamma_aprox(const unsigned iterations)
{
    long double s{};
    for (unsigned m{2}; m != iterations; ++m)
        if (const long double t{std::riemann_zetal(m) / m}; m % 2)
            s -= t;
        else
            s += t;
    return s;
};

int main()
{
    using namespace std::numbers;

    constexpr double γ{0.5772156649015328606065120900824024};
    std::cout << "γ = " << γ << '\n';

    constexpr double pi_4{pi / 4};
    constexpr double e_ln2{e * ln2};
    std::cout << "π/4 = " << pi_4 << "\ne·ln2 = " << e_ln2 << '\n';

    // e, π, √2, √3, Φ 정수 표현값과의 비교 확인 등
}

더 알아보기 (Learn more)

cppreference