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 _complex
který 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