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