ccpp:math

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 <math.h>, <stdlib.h> pro jazyk C a v knihovnách <cmath>, <cstdlib> pro jazyk C++. Zde pro přehled uvedeme ty nejpoužívanější z nich.

Absolutní hodnota je funkce, která má v jazycích C/C++ dvě varianty: celočíselnou v knihovách <stdlib.h>/<cstdlib> a s plovoucí čárkou v knihovnách <math.h>/<cmath>. 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 <stdio.h>
#include <stdlib.h>
#include <math.h>
 
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 <cstdio>
#include <cstdlib>
#include <cmath>
 
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;
}

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 <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int main()
{
  double x = 2;
  double y = 6;
  double vysl = pow(x, y); 
 
  printf("%f^%f = %lf\n", x, y, vysl);
 
  return 0;
}

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 <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int main()
{
  double x = 169;
  double vysl = sqrt(x); 
 
  printf("Odmocnina z %f je %lf\n", x, vysl);
 
  return 0;
}

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 <stdlib.h>
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
 
int main()
{
  printf("Pi = %f\n", M_PI);
 
  return 0;
}

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.

  • ccpp/math.txt
  • Poslední úprava: 2023/11/15 08:00
  • autor: bures