std::numbers::pi în C++

Constanta π cu precizia maximă a tipului double, plus alte constante matematice: e, √2, ln 2, φ.

Sintaxă
#include <numbers>
std::numbers::pi        // double
std::numbers::pi_v<float>
std::numbers::e, std::numbers::sqrt2, std::numbers::phi ...

Ce face std::numbers::pi

Înainte de C++20 nu exista o constantă standard pentru π: se folosea M_PI (nestandard) sau se scria de mână. Antetul <numbers> definește std::numbers::pi, de tip double, cu precizia maximă posibilă.

Pentru alte tipuri există variantele șablon: std::numbers::pi_v<float>, pi_v<long double>. Alte constante: e, sqrt2, sqrt3, ln2, ln10, log2e, phi (secțiunea de aur), inv_pi, egamma.

Ce returnează

Constante constexpr.

Exemple

Exemplul 1: Aria și circumferința unui cerc

#include <numbers>
#include <print>

int main() {
    double raza = 2.5;
    std::println("Aria: {:.2f} m²", std::numbers::pi * raza * raza);
    std::println("Circumferința: {:.2f} m", 2 * std::numbers::pi * raza);
}

Rezultat

Aria: 19.63 m²
Circumferința: 15.71 m

Exemplul 2: Alte constante

#include <numbers>
#include <print>

int main() {
    std::println("pi    = {}", std::numbers::pi);
    std::println("pi_v<float> = {}", std::numbers::pi_v<float>);
    std::println("e     = {}", std::numbers::e);
    std::println("sqrt2 = {}", std::numbers::sqrt2);
    std::println("phi   = {}", std::numbers::phi);
}

Rezultat

pi    = 3.141592653589793
pi_v<float> = 3.1415927
e     = 2.718281828459045
sqrt2 = 1.4142135623730951
phi   = 1.618033988749895

Greșeli frecvente

  • Scrii std::numbers::pi(), cu paranteze: este o variabilă, nu o funcție.
  • Folosești M_PI și codul nu compilează pe alt sistem (de exemplu MSVC fără _USE_MATH_DEFINES).

Comenzi înrudite

  • std::sin: Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani, nu în grade.
  • std::exp: Calculează e la puterea x, unde e ≈ 2,71828 este baza logaritmului natural.
  • std::complex: Numere complexe (a + bi), cu operațiile aritmetice obișnuite, modul, argument și funcții matematice.