Knihovna math.h

Standardní knihovna <math.h> obsahuje spoustu funkcí, které vykonávají běžné matematické operace. Jejich parametry i návratové hodnoty jsou většinou typu double. Kromě funkcí v této knihovně také naleznete užitečná makra, jako M_PI jež je hodnotou .

V systémech Linux/UNIX budete možná muset překladači gcc předat argument -lm, který zajistí použití sdílené matematické knihovny systému UNIX – zkratkou pro /lib/i386-linux-gnu/libm.so.6, nebo tak něco.

Překlad na příkazové řádce pomocí gcc může vypadat nějak takto:

$ gcc -o program kod.c -lm -Wall

Výčet funkcí

Vrací sinus argumentu.
Vrací kosinus argumentu.
Vrací tangens argumentu.
Vrací arcu ssinus argumentu.
Vrací arkus kosinus argumentu.
Vrací arkus tangens argumentu.
Funkce atan2() počítá arkus tangens dvou proměnných x a y. Výpočet je podobný výpočtu arkus tangens y / x, kromě toho, že znaménka obou argumentů jsou použita pro určení kvadrantu, ve kterém se nachází výsledná hodnota. Funkce atan2() vrací výsledek v radiánech, který je mezi -PI a PI včetně.
int abs(int j);
Vrací absolutní hodnotu argumentu typu int. Tato funkce není kupodivu definována v <math.h> ale <stdlib.h>. Přesto jsem si ji sem dovolil zařadit.
Vrací absolutní hodnotu argumentu typu double.
double aceil(double x);
Zaokrouhlí argument na nejmenší „vyšší“ celé číslo.
Zaokrouhlí argument na nejbližší „nižší“ celé číslo.
double round(double x);
Zaokrouhlí číslo na nejbližší celé číslo.
Vrací hodnotu e (základ přirozených algoritmů) umocněnou na x.
Vrací hodnotu přirozeného algoritmu x.
Vrací hodnotu desítkového logaritmu x
Vrací hodnotu x na y (2^3=8).
Vrací odmocninu z čísla x.
double fmod(double x, double y);
Funkce fmod() počítá hodnotu zbytku podílu x děleno y.
Návratová hodnota je x - n * y, kde n je podíl x / y, zaokrouhlený směrem k nule na celé číslo. Jinak řečeno, vrací celočíselný zbytek po celočíselném dělení.
Vrátí desetinnou část x a celou část uloží tam, kam ukazuje iptr.
double fmin(double x, double y);
Vrátí menší ze zadaných čísel.
double fmax(double x, double y);
Vrátí větší ze zadaných čísel.

Příklad použití

Použití těchto funkcí se mi zdá natolik triviální, že snad není k příkladu třeba žádného komentáře.

  1. /*------------------------------------------------*/
  2. /* c21/matika.c                                   */
  3. #include <stdio.h>
  4. #define _USE_MATH_DEFINES /* Kvuli Visual Studio */
  5. #include <math.h>
  6.  
  7. int main(void)
  8. {
  9.     int ia;
  10.     float fa;
  11.     double da;
  12.     /* kresleni sinusove vlny */
  13.     for (fa = 0.0; fa < 2.0 * M_PI; fa += M_PI / 13) {
  14.         ia = 40 + 20.0 * sin(fa);
  15.         printf("%*c\n", ia, '*');
  16.     }
  17.  
  18.     printf("ceil(%f)=%f\tfloor(%f)=%f\n", 5.9, ceil(5.9), 5.9, floor(5.9));
  19.     printf("ceil(%f)=%f\tfloor(%f)=%f\n", 5.1, ceil(5.1), 5.1, floor(5.1));
  20.  
  21. #define MODF 5.5
  22.     fa = modf(MODF, &da);
  23.     printf("fmod(%4.2f,%4.2f)=%4.2f\nmodf(%4.2f,&y)=%4.2f --> y=%4.2f\n",
  24.            100.0, 3.0, fmod(100.0, 3.0), MODF, fa, da);
  25.  
  26.     printf("min(%i, %i) = %f\n", 537, -4, fmin(537,-4));
  27.  
  28.     return 0;
  29. }
  30.  
  31. /*------------------------------------------------*/
Visual Studio

Bez makra _USE_MATH_DEFINES by Visual Studio nezavedlo makra M_PI atp. Musí se uvádět před includováním <math.h>.

Výstup z programu:


                                       *
                                           *
                                                *
                                                    *
                                                       *
                                                         *
                                                          *
                                                          *
                                                         *
                                                       *
                                                    *
                                                *
                                           *
                                      *
                                  *
                             *
                         *
                      *
                    *
                   *
                   *
                    *
                      *
                         *
                             *
                                  *
ceil(5.900000)=6.000000 floor(5.900000)=5.000000
ceil(5.100000)=6.000000 floor(5.100000)=5.000000
fmod(100.00,3.00)=1.00
modf(5.50,&y)=0.50 --> y=5.00
min(537, -4) = -4.000000
Komentář Hlášení chyby
Vytvořeno: 29.8.2003
Naposledy upraveno: 22.6.2014
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..