ccpp:math

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
ccpp:math [2019/09/30 08:59] buresccpp:math [2023/11/15 08:00] (aktuální) bures
Řádek 1: Řádek 1:
 ====== Matematické funkce ====== ====== 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>/<cmath>** (C/C++) **<stdlib.h>/<cstdlib>** (C/C++). Zde pro přehled uvedeme ty nejpoužívanější z nich.+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 - abs(), fabs(), std::abs() ===== ===== Absolutní hodnota - abs(), fabs(), std::abs() =====
-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é.+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 funkcí abs() a fabs() (C implementace) ====+=== Ukázka použití funkcí abs() a fabs() (C implementace) ===
 <code c> <code c>
 +#include <stdio.h>
 #include <stdlib.h> #include <stdlib.h>
 #include <math.h> #include <math.h>
Řádek 19: Řádek 20:
      
   printf("|%d| = %d\n", x, ax);   printf("|%d| = %d\n", x, ax);
-  printf("|%lf| = %lf\n", y, ay);+  printf("|%f| = %f\n", y, ay);
      
   return 0;   return 0;
Řádek 25: Řádek 26:
 </code> </code>
  
-==== Ukázka funkce std::abs() (C++17 implementace) ====+=== Ukázka použití funkce std::abs() (C++17 implementace) ===
 <code c> <code c>
 +#include <cstdio>
 #include <cstdlib> #include <cstdlib>
 #include <cmath> #include <cmath>
Řádek 39: Řádek 41:
      
   std::printf("|%d| = %d\n", x, ax);   std::printf("|%d| = %d\n", x, ax);
-  std::printf("|%lf| = %lf\n", y, ay);+  std::printf("|%f| = %f\n", y, ay);
      
   return 0;   return 0;
 } }
 </code> </code>
 +
 +===== 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() ===
 +<code c>
 +#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;
 +}
 +</code>
 +
 +===== 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() ===
 +<code c>
 +#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;
 +}
 +</code>
 +
 +===== 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.
 +
 +<code c>
 +#include <stdlib.h>
 +#include <stdio.h>
 +#define _USE_MATH_DEFINES
 +#include <math.h>
 +
 +int main()
 +{
 +  printf("Pi = %f\n", M_PI);
 +  
 +  return 0;
 +}
 +</code>
 +
 +===== 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 <math.h>]]
 +  * [[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]]
 +
  
  • ccpp/math.1569826799.txt.gz
  • Poslední úprava: 2019/09/30 08:59
  • autor: bures