====== Matematické funkce ====== C i C++ je jako většina programovacích jazyků vybavena knihovnou s nejběžnějšími matematickými funkcemi. Tyto funkce můžeme nalézt v knihovnách '''', '''' pro jazyk C a v knihovnách '''', '''' pro jazyk C++. Zde pro přehled uvedeme ty nejpoužívanější z nich. ===== Absolutní hodnota - abs(), fabs(), std::abs() ===== Absolutní hodnota je funkce, která má v jazycích C/C++ dvě varianty: celočíselnou v knihovách ''''/'''' a s plovoucí čárkou v knihovnách ''''/''''. V moderních implementacích (od C++17) stačí includovat pouze jednu z uvedených knihoven a lze pak používat funkci std::abs() jak pro datové typy s plovoucí čárkou, tak i celočíselné (je přetížená). === Ukázka použití funkcí abs() a fabs() (C implementace) === #include #include #include int main() { int x = -42; double y = 6.34; int ax = abs(x); double ay = fabs(ay); printf("|%d| = %d\n", x, ax); printf("|%f| = %f\n", y, ay); return 0; } === Ukázka použití funkce std::abs() (C++17 implementace) === #include #include #include int main() { int x = -42; double y = 6.34; int ax = std::abs(x); double ay = std::abs(ay); std::printf("|%d| = %d\n", x, ax); std::printf("|%f| = %f\n", y, ay); return 0; } ===== Mocnina - pow() ===== Pokud chceme například vypočítat jen X², stačí ''double xna2 = x * x;'' -- není třeba využívat sofistikovanou matematickou funkci. Pro složitější mocniny se hodí C funkce ''double pow(double zaklad, double exponent)'', případně ''float powf(float zaklad, float exponent)'' nebo plně přetížená C++11 funkce ''std::pow()'', která umožňuje operandy všech číselných typů, včetně různého typu mezi operandy. === Ukázka použití funkce pow() === #include #include #include int main() { double x = 2; double y = 6; double vysl = pow(x, y); printf("%f^%f = %lf\n", x, y, vysl); return 0; } ===== Druhá odmocnina - sqrt() ===== Pro výpočet druhé odmocniny slouží knihovní funkce ''double sqrt(double cislo)'', případně ''float sqrtf(float cislo)'', nebo přetíženou funkci ''std::sqrt()''. Pro hledání odmocnin s vyšším odmocnitelem lze použít funkci ''pow()'' s exponentem ve formátu zlomku. === Ukázka použití funkce sqrt() === #include #include #include int main() { double x = 169; double vysl = sqrt(x); printf("Odmocnina z %f je %lf\n", x, vysl); return 0; } ===== Konstanta PI ===== Aby jsme mohli použít knihovní konstantu pro číslo pi, pojmenovanou ''M_PI'' je třeba před samotným includováním matematické knihovny definovat symbol matematických konstant - viz ukázka. #include #include #define _USE_MATH_DEFINES #include int main() { printf("Pi = %f\n", M_PI); return 0; } ===== Goniometrické funkce ===== Všechny goniometrické funkce v knihovně jazyka C pracují s **úhly v radiánech** v datovém typu double. Pokud je potřeba použít úhel v datovém typu float, lze na konec názvu funkce přidat //f// (cos -> cosf). Jako obvykle jsou k dispozici i přetížené funkce jazyka C++, které jsou uloženy v namespace ''std::''. ^ Matematická funkce ^ Funkce z knihovny ^ ^ Kosinus | ''cos(double rad)'' | ^ Sinus | ''sin(double rad)'' | ^ Tangens | ''tan(double rad)'' | ^ Arkus kosinus | ''acos(double cos)'' | ^ Arkus sinus | ''asin(double sin)'' | ^ Arkus tangens | ''atan(double tan)'' | Konkrétní rozsahy výstupních hodnot inverzních funkcí doporučujeme předem prostudovat v referenční příručce - viz Odkazy. ===== Odkazy ===== * [[http://www.cplusplus.com/reference/cmath/|Přehled knihovny ]] * [[https://en.cppreference.com/w/c/numeric/math|Common mathematical functions - C reference]] * [[https://en.cppreference.com/w/cpp/numeric/math|Common mathematical functions - C++ reference]]