Ce face std::abs
std::abs transformă un număr negativ în opusul lui și lasă neschimbate numerele pozitive. Are variante pentru int, long, long long (în <cstdlib>) și pentru float, double (în <cmath>). Include ambele anteturi ca să fii sigur că se alege varianta potrivită.
std::fabs lucrează doar cu numere cu virgulă și returnează mereu un tip cu virgulă, chiar dacă primește un întreg.
Parametri
| Parametru | Descriere |
|---|---|
n, x |
Numărul. |
Ce returnează
Valoarea absolută, de același tip ca argumentul (fabs: double).
Exemple
Exemplul 1: Diferența dintre două temperaturi
#include <cmath>
#include <cstdlib>
#include <print>
int main() {
int dimineata = -7;
int pranz = 4;
std::println("Diferență: {} grade", std::abs(pranz - dimineata));
std::println("abs(-7) = {}, abs(-2.75) = {}", std::abs(dimineata), std::abs(-2.75));
std::println("fabs(-3) = {}", std::fabs(-3));
}
Rezultat
Diferență: 11 grade
abs(-7) = 7, abs(-2.75) = 2.75
fabs(-3) = 3
Exemplul 2: Compararea a două numere cu virgulă
0.1 + 0.2 nu este exact 0.3 în memorie. Se compară diferența absolută cu o toleranță mică.
#include <cmath>
#include <print>
int main() {
double a = 0.1 + 0.2;
double b = 0.3;
std::println("a == b: {}", a == b);
std::println("aproape egale: {}", std::abs(a - b) < 1e-9);
}
Rezultat
a == b: false
aproape egale: true
Greșeli frecvente
std::abs(INT_MIN)este comportament nedefinit: valoarea pozitivă 2147483648 nu încape înint.- Scrii
abs(-2.75)fărăstd::și cu doar<cstdlib>inclus: se poate apela varianta C pentruintși rezultatul devine 2.
Comenzi înrudite
std::fmin: Returnează minimul (fmin) sau maximul (fmax) a două numere cu virgulă, ignorând o valoare NaN.std::sqrt: Calculează rădăcina pătrată (sqrt) sau rădăcina cubică (cbrt) a unui număr.std::round: Rotunjește la cel mai apropiat întreg; la jumătate (x,5) rotunjește în direcția opusă lui zero.std::numeric_limits: Dă proprietățile unui tip numeric: valoarea maximă și minimă, precizia, dacă are semn, infinitul.