Ce face math.h (sqrt, pow, fabs...)
Funcțiile din math.h lucrează cu double. Fiecare are variante pentru float (sufix f: sqrtf) și long double (sufix l: sqrtl). Pe Linux, la compilare cu gcc adaugi de obicei -lm, ca programul să fie legat de biblioteca matematică.
sqrt radicalul, pow(b, e) puterea, fabs valoarea absolută pentru numere reale (abs din stdlib.h este pentru int), hypot(x, y) ipotenuza, exp/log/log10 exponențiala și logaritmii. Funcțiile trigonometrice primesc unghiul în radiani.
Pentru argumente invalide (sqrt(-1), log(0)) funcțiile întorc valori speciale: NaN („not a number”) sau infinit, pe care le testezi cu isnan și isinf. Constanta M_PI nu face parte din standardul C (o oferă POSIX); un mod portabil este acos(-1.0).
Parametri
| Parametru | Descriere |
|---|---|
x, y, baza, exp |
Valori double; unghiurile sunt în radiani. |
Ce returnează
Rezultatul ca double, sau NaN/infinit pentru argumente în afara domeniului.
Exemple
Exemplul 1: Distanța dintre două puncte
#include <math.h>
#include <stdio.h>
int main(void) {
double x1 = 1, y1 = 2, x2 = 4, y2 = 6;
double d1 = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
double d2 = hypot(x2 - x1, y2 - y1);
printf("distanța: %.2f (cu hypot: %.2f)\n", d1, d2);
return 0;
}
Rezultat
distanța: 5.00 (cu hypot: 5.00)
Exemplul 2: Dobânda compusă
1000 lei depuși 5 ani cu o dobândă de 6% pe an: suma * (1 + r)ani.
#include <math.h>
#include <stdio.h>
int main(void) {
double depus = 1000.0, dobanda = 0.06;
for (int ani = 1; ani <= 5; ani++) {
printf("după %d ani: %.2f lei\n", ani, depus * pow(1 + dobanda, ani));
}
return 0;
}
Rezultat
după 1 ani: 1060.00 lei
după 2 ani: 1123.60 lei
după 3 ani: 1191.02 lei
după 4 ani: 1262.48 lei
după 5 ani: 1338.23 lei
Exemplul 3: Valori speciale și trigonometrie
#include <math.h>
#include <stdio.h>
int main(void) {
const double pi = acos(-1.0);
printf("pi = %.6f\n", pi);
printf("sin(30°) = %.2f\n", sin(30 * pi / 180));
printf("fabs(-7.5) = %.1f\n", fabs(-7.5));
printf("log10(1000) = %.0f\n", log10(1000));
double r = sqrt(-1.0);
printf("sqrt(-1) este NaN? %s\n", isnan(r) ? "da" : "nu");
printf("log(0) este infinit? %s\n", isinf(log(0.0)) ? "da" : "nu");
return 0;
}
Rezultat
pi = 3.141593
sin(30°) = 0.50
fabs(-7.5) = 7.5
log10(1000) = 3
sqrt(-1) este NaN? da
log(0) este infinit? da
Greșeli frecvente
- Folosești
^pentru putere: în C,2 ^ 3este SAU exclusiv pe biți și dă 1. Pentru putere foloseștipowsau înmulțiri. - Dai unghiul în grade lui
sin/cos. Înmulțește cu π/180. - Folosești
abspe undouble: valoarea este convertită laintși pierzi zecimalele. Pentru numere reale foloseștefabs. - Pe Linux primești eroarea
undefined reference to `sqrt'la link-are: adaugă-lmla sfârșitul comenziigcc.
Comenzi înrudite
round, floor, ceil, trunc și fmod: Rotunjesc un număr real la întreg în moduri diferite și calculează restul împărțirii pentru numere reale.Tipuri de date (int, char, double): Tipurile de bază din C: întregi (char, short, int, long, long long), cu sau fără semn, și numere reale (float, double).Operatori aritmetici (+ - * / % ++ --): Adunare, scădere, înmulțire, împărțire, restul împărțirii, atribuiri compuse și incrementare cu ++ / –.Compilarea cu gcc și clang: Cum transformi codul C într-un program executabil cu gcc sau clang și ce fac opțiunile folosite cel mai des.
Întrebări & Exemple de Cod:
math.h (sqrt, pow, fabs…)Ai o nelămurire despre utilizarea comenzii
math.h (sqrt, pow, fabs…)sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.