std::abs în C++

Returnează valoarea absolută a unui număr (distanța lui față de zero, fără semn).

Sintaxă
int abs(int n);          // <cstdlib>
long long abs(long long n);
double abs(double x);    // <cmath>
double fabs(double x);   // <cmath>

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 în int.
  • Scrii abs(-2.75) fără std:: și cu doar <cstdlib> inclus: se poate apela varianta C pentru int ș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.