Share via


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, cacosf, cacosl Výpočet komplexního kosinusu oblouku komplexního čísla
casin, casinf, casinl Výpočet komplexního arkusového sinus komplexního čísla
catan, catanf, catanl Výpočet komplexního arkusového tangens komplexního čísla
ccos, ccosf, ccosl Výpočet komplexního kosinus komplexního čísla
csin, csinf, csinl Výpočet komplexního sinusu komplexního čísla
ctan, ctanf, ctanl Výpočet komplexní tangens komplexního čísla

Hyperbolické funkce

Function Popis
cacosh, cacoshf, cacoshl Výpočet komplexního hyperbolického kosinus komplexního čísla
casinh, casinhf, casinhl Vypočítá hyperbolický arkus komplexního čísla.
catanh, catanhf, catanhl Výpočet hyperbolického hyperbolického arkusu komplexního čísla
ccosh, ccoshf, ccoshl Výpočet komplexního hyperbolického kosinus komplexního čísla
csinh, csinhf, csinhl Výpočet komplexního hyperbolického sinusu komplexního čísla
ctanh, ctanhf, ctanhl Výpočet komplexního hyperbolického tangensu komplexního čísla

Exponenciální a logaritmické funkce

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

Funkce výkonu a absolutní hodnoty

Function Popis
cabs, cabsf, cabsl Vypočítá komplexní absolutní hodnotu (označovanou také jako normu, moduls nebo velikost) komplexního čísla.
cpow, cpowf, cpowl Výpočet komplexní funkce napájení
csqrt, csqrtf, csqrtl 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, cargf, cargl Výpočet argumentu (označovaného také jako úhel fáze) komplexního čísla
cimag, cimagf, cimagl Výpočet imaginární části komplexního čísla
conj, conjf, conjl Výpočet komplexního konjugování komplexního čísla
cproj, cprojf, cprojl Výpočet projekce komplexního čísla do Riemannovy sféry
creal, crealf, creall Výpočet reálné části komplexního čísla
norm, normf, norml 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