MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Biblioteca standard C++

Constantele și operațiile matematice

Începând cu standardul C++20, biblioteca standard oferă modulul numbers, care conține o serie de constante matematice încorporate. Unele dintre cele mai frecvente sunt:

  • std::numbers::e: numărul 2.71828 (baza logaritmului natural)
  • std::numbers::pi: numărul π - 3.14159...
  • std::numbers::sqrt2: rădăcina pătrată a numărului 2 - 1.41421...
  • std::numbers::phi: secțiunea de aur (numărul lui Fidia) φ - 1.618...

Toate aceste valori sunt de tipul double.

Funcții matematice

Fișierul de antet <cmath> din biblioteca standard C++ definește un set de funcții matematice care pot fi utilizate în programe. Iată cele mai frecvente dintre ele:

  • abs(arg): calculează valoarea absolută a lui arg. Spre deosebire de majoritatea funcțiilor, abs() returnează un tip întreg dacă arg este un număr întreg
  • ceil(arg): calculează cel mai apropiat număr întreg mai mare sau egal cu arg, și îl returnează sub formă de număr cu virgulă mobilă. De exemplu, expresia std::ceil(2.5) returnează 3.0, iar std::ceil(-2.5) returnează -2.0. (partea fracționară este rotunjită la unitate)
  • floor(arg): calculează cel mai apropiat număr întreg mai mic sau egal cu arg, și îl returnează sub formă de număr cu virgulă mobilă. De exemplu, expresia std::floor(2.5) returnează 2.0, iar std::floor(-2.5) returnează -3.0. (partea fracționară este rotunjită la zero)
  • exp(arg): calculează valoarea expresiei e^arg
  • log(arg): calculează logaritmul natural (cu baza e) al lui arg
  • log10(arg): calculează logaritmul în baza 10 al lui arg
  • pow(arg1, arg2): calculează valoarea lui arg1 ridicată la puterea arg2, adică arg1^arg2. Valorile arg1 și arg2 pot fi numere întregi sau cu virgulă mobilă. De exemplu, rezultatul std::pow(2, 3) este 8.0, iar std::pow(4, 0.5) este 2.0
  • sqrt(arg): calculează rădăcina pătrată a lui arg
  • round(arg), lround(arg) și llround(arg) rotunjesc un număr la cel mai apropiat întreg. Diferența dintre ele constă în tipul rezultatului: round() returnează un număr cu virgulă mobilă, lround(arg) returnează un număr long, iar llround(arg) returnează un număr long long
  • sin(arg): calculează sinusul unghiului, unde arg reprezintă valoarea în radiani
  • cos(arg): calculează cosinusul unghiului
  • tan(arg): calculează tangenta unghiului
  • isinf(arg): returnează true dacă argumentul reprezintă +/-∞
  • isnan(arg): returnează true dacă argumentul reprezintă NaN (Not a Number)

Exemplu de utilizare a unor funcții matematice:

#include <iostream>
#include <math.h>   // includem fișierul de antet math.h

int main()
{
    std::cout << "abs(-3) = " << std::abs(-3) << "\n";
    std::cout << "pow(-3, 2) = " << std::pow(-3, 2) << "\n";
    std::cout << "round(-3.4) = " << std::round(-3.2) << "\n";
    std::cout << "ceil(3.2) = " << std::ceil(3.2) << "\n";
    std::cout << "floor(3.2) = " << std::floor(3.2) << "\n";
    std::cout << "ceil(-3.2) = " << std::ceil(-3.2) << "\n";
    std::cout << "floor(-3.2) = " << std::floor(-3.2) << "\n";
}

Rezultatul pe consolă:

abs(-3) = 3
pow(-3, 2) = 9
round(-3.4) = -3
ceil(3.2) = 4
floor(3.2) = 3
ceil(-3.2) = -3
floor(-3.2) = -4

Verificarea rezultatului operațiunilor aritmetice pentru NaN și infinit

#include <iostream>
#include <math.h>

int main()
{
    double a{ 1.5 }, b{-1.5}, c{}, d {};
    std::cout << a << "/" << b << " is Infinity? " << std::isinf(a / b) << std::endl;
    std::cout << a << "/" << b << " is Nan? " << std::isnan(a / b) << std::endl;
    std::cout << a << "/" << c << " is Infinity? " << std::isinf(a / c) << std::endl;
    std::cout << c << "/" << d << " is NaN? " << std::isnan(c / d) << std::endl;
}

Rezultatul pe consolă:

1.5/-1.5 is Infinity? 0
1.5/-1.5 is Nan? 0
1.5/0 is Infinity? 1
0/0 is NaN? 1