Typově obecné matematické funkce
V případě standardu ISO C 11 (C11) a novější hlavička <tgmath.h>
kromě zahrnutí <math.h>
a <complex.h>
poskytuje makra, která vyvolávají odpovídající matematickou funkci na základě typů parametrů.
Matematické funkce knihovny modulu runtime jazyka C mají reálné a složité varianty. Každá varianta se dodává ve třech příchutích v závislosti na typu argumentu: float
, double
a long double
. Vzhledem k tomu, že jazyk C nepodporuje přetížení, jako je C++, má každá varianta jiný název. Pokud chcete například získat absolutní hodnotu skutečné hodnoty s plovoucí desetinou čárkou, volali fabsf
byste buď hodnotu , fabs
nebo fabsl
v závislosti na tom, jestli předáváte float
hodnotu , double
nebo long double
hodnotu. Pokud chcete získat komplexní absolutní hodnotu, volali byste jednu z cabsf
hodnot , cabs
nebo cabsl
v závislosti na tom, jestli předáváte float
hodnotu , double
a long double
složitou hodnotu. Pokud argumenty neodpovídají žádnému z výše uvedených typů, funkce se vybere, jako by argumenty byly dvojité.
<tgmath.h>
obsahuje makra, která zjednodušují výběr správné matematické funkce pro volání. Makra zkontrolují typ, který jsou předány, a potom volají správnou funkci. Makro je například sqrt
svázané sqrtf()
sqrt(9.9f)
s , ale je vázáno sqrt(9.9)
na sqrt()
. Pokud je alespoň jeden argument makra pro obecný parametr složitý, pak makro vytvoří vazbu na komplexní funkci; jinak vyvolá skutečnou funkci.
Makra obecného <tgmath.h>
typu umožňují psát přenosnější kód, protože v závislosti na typu argumentu nemusíte spravovat přetypování ani vybírat různé názvy funkcí.
Tato makra jsou v jejich vlastní hlavičce, aby se programy napsané pomocí <math.h>
hlavičky nezalomily. Chová se tak double x = sin(42);
, jak má vždy, když zahrnete <math.h>. I tak se očekává, že většina stávajících programů jazyka C nebude ovlivněna, pokud je hlavička <tgmath.h>
zahrnuta místo <math.h>
nebo <complex.h>
.
V následující tabulce jsou uvedena makra, která <tgmath.h>
jsou k dispozici a na co se rozbalí. modf
tato tabulka není součástí této tabulky, protože neobsahuje odpovídající typově obecné makro, protože není jasné, jak ho zabezpečit bez komplikování rozlišení typu.
Požadavky
Zkompilovat pomocí /std:c11
.
Windows SDK 10.0.20348.0 (verze 2104) nebo novější Nejnovější sadu SDK si můžete stáhnout ze sady Windows SDK . Pokyny k instalaci a použití sady SDK pro vývoj pro C11 a C17 najdete v tématu Instalace podpory C11 a C17 v sadě Visual Studio.