Sdílet prostřednictvím


Podpora komplexní matematiky jazyka C

Knihovna CRT (Microsoft C Runtime Library) poskytuje komplexní matematické funkce knihovny, včetně všech funkcí vyžadovaných iso C99. Kompilátor přímo nepodporuje ani complex _Complex klíčové slovo, proto implementace Microsoftu používá typy struktur k reprezentaci komplexních čísel.

Tyto funkce se implementují pro vyvážení výkonu s správností. Vzhledem k tomu, že vytvoření správně zaokrouhleného výsledku může být příliš nákladné, jsou tyto funkce navrženy tak, aby efektivně vytvářely blízkou aproximaci správně zaokrouhleného výsledku. Ve většině případů je výsledek v rozsahu +/-1 s nejnižší přesností (ULP) správně zaokrouhleného výsledku, i když může docházet k případům, kdy je větší nepřesnost.

Složité matematické rutiny spoléhají na funkce matematické knihovny s plovoucí desetinou čárkou pro jejich implementaci. Tyto funkce mají různé implementace pro různé architektury procesoru. Například 32bitová verze x86 CRT může mít jinou implementaci než 64bitová verze x64 CRT. Některé funkce navíc můžou mít několik implementací pro danou architekturu procesoru. Nejúčinnější implementace je vybrána dynamicky za běhu v závislosti na sadách instrukcí podporovaných procesorem. Například v 32bitovém x86 CRT mají některé funkce implementaci x87 i implementaci SSE2. Při spouštění na procesoru, který podporuje SSE2, se použije rychlejší implementace SSE2. Při spouštění na procesoru, který nepodporuje SSE2, se používá pomalejší implementace x87. Vzhledem k tomu, že různé implementace funkcí matematické knihovny mohou k vytvoření výsledků použít různé instrukce procesoru a různé algoritmy, můžou funkce vytvářet různé výsledky napříč procesory. Ve většiněpřípadůch

Typy používané v komplexní matematikě

Implementace complex.h hlavičky Microsoftu definuje tyto typy jako ekvivalenty pro standardní nativní komplexní typy C99:

Standardní typ Typ Microsoftu
float complex nebo float _Complex _Fcomplex
double complex nebo double _Complex _Dcomplex
long double complex nebo long double _Complex _Lcomplex

Hlavička math.h definuje samostatný typ, struct _complexkterý se používá pro _cabs funkci. Typ struct _complex není používán ekvivalentními komplexními matematickými funkcemi cabs, cabsf, cabsl.

Komplexní konstanty a makra

I je definován jako komplexní typ _Fcomplex inicializován pomocí { 0.0f, 1.0f }.

Trigonometrické funkce

Function Popis
cacos, , cacosfcacosl Výpočet komplexního kosinusu oblouku komplexního čísla
casin, , casinfcasinl Výpočet komplexního arkusového sinus komplexního čísla
catan, , catanfcatanl Výpočet komplexního arkusového tangens komplexního čísla
ccos, , ccosfccosl Výpočet komplexního kosinus komplexního čísla
csin, , csinfcsinl Výpočet komplexního sinusu komplexního čísla
ctan, , ctanfctanl Výpočet komplexní tangens komplexního čísla

Hyperbolické funkce

Function Popis
cacosh, , cacoshfcacoshl Výpočet komplexního hyperbolického kosinus komplexního čísla
casinh, , casinhfcasinhl Vypočítá hyperbolický arkus komplexního čísla.
catanh, , catanhfcatanhl Výpočet hyperbolického hyperbolického arkusu komplexního čísla
ccosh, , ccoshfccoshl Výpočet komplexního hyperbolického kosinus komplexního čísla
csinh, , csinhfcsinhl Výpočet komplexního hyperbolického sinusu komplexního čísla
ctanh, , ctanhfctanhl Výpočet komplexního hyperbolického tangensu komplexního čísla

Exponenciální a logaritmické funkce

Function Popis
cexp, , cexpfcexpl Výpočet komplexního základu e exponenciálního čísla komplexního čísla
clog, , clogfclogl Výpočet komplexního přirozeného logaritmu (base-e) komplexního čísla
clog10, , clog10fclog10l Vypočítá komplexní logaritmus komplexního čísla o základu 10.

Funkce výkonu a absolutní hodnoty

Function Popis
cabs, , cabsfcabsl Vypočítá komplexní absolutní hodnotu (označovanou také jako normu, moduls nebo velikost) komplexního čísla.
cpow, , cpowfcpowl Výpočet komplexní funkce napájení
csqrt, , csqrtfcsqrtl Vypočítá komplexní druhou odmocninu komplexního čísla.

Funkce manipulace

Function Popis
_Cbuild, , _FCbuild_LCbuild Vytvoření komplexního čísla ze skutečných a imaginárních částí
carg, , cargfcargl Výpočet argumentu (označovaného také jako úhel fáze) komplexního čísla
cimag, , cimagfcimagl Výpočet imaginární části komplexního čísla
conj, , conjfconjl Výpočet komplexního konjugování komplexního čísla
cproj, , cprojfcprojl Výpočet projekce komplexního čísla do Riemannovy sféry
creal, , crealfcreall Výpočet reálné části komplexního čísla
norm, , normfnorml Výpočet čtvercové velikosti komplexního čísla

Funkce operací

Vzhledem k tomu, že komplexní čísla nejsou nativním typem v kompilátoru Microsoftu, standardní aritmetické operátory nejsou definovány u komplexních typů. Pro usnadnění práce jsou k dispozici tyto komplexní matematické funkce knihovny, které umožňují omezenou manipulaci se složitými čísly v uživatelském kódu:

Function Popis
_Cmulcc, , _FCmulcc_LCmulcc Násobení dvou komplexních čísel
_Cmulcr, , _FCmulcr_LCmulcr Násobení komplexního a číslo s plovoucí desetinou čárkou

Viz také

Matematika pro obecné typy
Rutiny UCRT (Universal C runtime) podle kategorie