math.h

math.h je hlavičkový soubor standardní knihovny jazyka C, bývá také součástí jazyka C++. Tato knihovna implementuje matematické funkce pro reálná čísla (např. goniometrické funkce, logaritmy) s přesností double. Od standardu C99 definuje také funkce pro čísla s přesností float a long double. (Může obsahovat konstanty např. Ludolfovo číslo, Eulerovo číslo, ...). Hlavičkový soubor se do zdrojového kódu vkládá pomocí direktivy preprocesoru #include <math.h> (v C). V C++ oficiální standard místo math.h definuje knihovnu cmath, která implementuje stejnojmenné funkce jako math.h, musíme se tedy rozhodnout, kterou knihovnu chceme použít. Hlavička knihovny cmath se vkládá příkazem #include <cmath>, ale použití math.h v C++ z důvodu zpětné kompatibility také funguje.

Základní funkce knihovny math.h

Funkce knihovny math.h mají většinou "základní" variantu, která je v C-jazyku realizována s přesností double a potom variantu pro přesnost float a pro přesnost long double. Například:

  • základní varianta je funkce sin, která má argument typu double a vrací hodnotu sinu v přesnosti double,
  • funkce sinf má argument typu float a vrací hodnotu sinu jako float
  • funkce sinl má argument typu long double a vrací hodnotu sinu jako long double

V jazyce C++ funguje math.h trochu odlišně, protože základní varianta funkce je definována s pomocí přetížení pro všechny přesnosti. U funkce sin potom záleží typ návratové hodnoty na typu argumentu:

  • sin s argumentem typu float vrátí typ float
  • sin s argumentem typu double vrátí typ double
  • sin s argumentem typu long double vrátí typ long double

Varianty funkcí s přesností double a long double (tj. např. sinf a sinl) fungují v C++ stejně jako v klasickém C-jazyku.

FunkcePopistyp
fabs, fabsf, fabslabsolutní hodnotadouble, float, long double
sqrt, sqrtf, sqrtldruhá odmocninadouble, float, long double
pow, powf, powlumocňovánídouble, float, long double
log, logf, loglpřirozený logaritmusdouble, float, long double
log10, log10f, log10llogaritmus se základem 10double, float, long double
sin, sinf, sinlsinusdouble, float, long double
cos, cosf, coslkosinusdouble, float, long double
tan, tanf, tanltangensdouble, float, long double
acos, acosf, acoslarcus cosinusdouble, float, long double
asin, asinf, asinlarcus sinusdouble, float, long double
atan, atanf, atanlarcus tangensdouble, float, long double
atan2, atan2f, atan2larcus tangensdouble, float, long double
sinh, sinhf, sinhlhyperbolický sinusdouble, float, long double
cosh, coshf, coshlhyperbolický cosinusdouble, float, long double
tanh, tanhf, tanhlhyperbolický tangensdouble, float, long double
ceil, ceilf, ceillvrátí nejbližší celé číslo ne menší než argument (zaokrouhlí nahoru)double, float, long double
floor, floorf, floorlvrátí nejbližší celé číslo ne větší než argument (zaokrouhlí dolů)

Příklad použití

Uvedený příklad by měl fungovat v jazyce C i C++.

Funkce pow(x,y) (z anglického power, což znamená umocňovat) umocňuje reálný základ x reálným číslem y. Číslo x nesmí být záporné, pokud není y celé číslo. Číslo x nesmí být nulové, pokud je y menší nebo rovné 0. Záporných hodnot se můžeme zbavit použitím funkce fabs(x) .

Funkci pow je možné použít i pro odmocňování, například pow(x, 1./2.), je druhá odmocnina z x. Pro druhou odmocninu je lepší použít funkci sqrt(x).

#include <math.h>
#include <stdio.h>

int main()
{
    double x, y, z;
    printf("Zadejte cislo:");
    scanf("%lf", &x);
    y = sqrt(x);
    z = pow(x, 3.);
    printf("Druha odmocnina: %f\n", y);
    printf("Treti mocnina: %f\n", z);
    return 0;
}

Související články

Reference