C-Unterstützung für komplexe Mathematik

Die Microsoft C-Runtime-Bibliothek (CRT) bietet komplexe mathematische Bibliotheksfunktionen, einschließlich aller funktionen, die von ISO C99 benötigt werden. Der Compiler unterstützt weder eine noch eine complex_Complex Schlüsselwort (keyword), daher verwendet die Microsoft-Implementierung Strukturtypen, um komplexe Zahlen darzustellen.

Diese Funktionen werden implementiert, damit die Sprache ebenso leistungsfähig wie korrekt ist. Da das korrekt gerundete Ergebnis nur sehr teuer errechenbar ist, wurden diese Funktionen dazu entworfen, eine starke Annäherung an das korrekt gerundete Ergebnis zu erzielen. In den meisten Fällen liegt das erzeugte Ergebnis innerhalb von +/-1 Einheit der geringsten Genauigkeit (ULP) des korrekt gerundeten Ergebnisses, es kann jedoch vorkommen, dass es eine größere Ungenauigkeit gibt.

Die komplexe Mathematikroutinen bauen für die Implementierung auf die Gleitkommafunktionen in der mathematischen Bibliothek. Diese Funktionen haben unterschiedliche Implementierungen für verschiedene CPU-Architekturen. Die 32-Bit-x86-CRT hat möglicherweise eine andere Implementierung als die 64-Bit x64 CRT. Darüber hinaus haben möglicherweise einige der Funktionen mehrere Implementierungen für eine bestimmte CPU-Architektur. Eine möglichst effiziente Implementierung wird je nach den von der CPU unterstützten Anweisungssets dynamisch zur Laufzeit ausgewählt. In der 32-Bit-x86-CRT haben einige Funktionen eine x87- und eine SSE2-Implementierung. Wenn eine CPU verwendet wird, die SSE2 unterstützt, wird die schnellere SSE2-Implementierung verwendet. Wenn sie auf einer CPU ausgeführt wird, die SSE2 nicht unterstützt, wird die langsamere x87-Implementierung verwendet. Da verschiedene Implementierungen der Funktionen der mathematischen Bibliothek verschiedene CPU-Anweisungen und andere Algorithmen verwenden, um Ergebnisse zu erzielen, unterscheiden sich die Ergebnisse in den verschiedenen CPUs möglicherweise. In den meisten Fällen befinden sich die Ergebnisse innerhalb von +/-1 ULP des korrekt gerundeten Ergebnisses, aber die tatsächlichen Ergebnisse können zwischen CPUs variieren.

Typen, die in der komplexen Mathematik verwendet werden

Die Microsoft-Implementierung des complex.h Headers definiert diese Typen als Entsprechungen für die systemeigenen systemeigenen C99-Standardtypen:

Standardtyp Microsoft-Typ
float complex oder float _Complex _Fcomplex
double complex oder double _Complex _Dcomplex
long double complex oder long double _Complex _Lcomplex

Die math.h Kopfzeile definiert einen separaten Typ, struct _complexder für die _cabs Funktion verwendet wird. Der struct _complex Typ wird nicht von den entsprechenden komplexen mathematischen Funktionen cabs, , cabsf, cabslverwendet.

Komplexe Konstanten und Makros

I wird als komplexer Typ _Fcomplex definiert, der von { 0.0f, 1.0f }.

Trigonometrische Funktionen

Function Beschreibung
cacos, cacosf, cacosl Berechnen des komplexen Arcuscosinuswerts einer komplexen Zahl
casin, casinf, casinl Berechnen des komplexen Arcussinuswerts einer komplexen Zahl
catan, catanf, catanl Berechnen des komplexen Arcustangenswerts einer komplexen Zahl
ccos, ccosf, ccosl Berechnen des komplexen Cosinuswerts einer komplexen Zahl
csin, csinf, csinl Berechnen des komplexen Sinuswerts einer komplexen Zahl
ctan, ctanf, ctanl Berechnen des komplexen Tangenswerts einer komplexen Zahl

Hyperbolische Funktionen

Function Beschreibung
cacosh, cacoshf, cacoshl Berechnen des komplexen hyperbolischen Arcuscosinuswerts einer komplexen Zahl
casinh, casinhf, casinhl Berechnen des komplexen hyperbolischen Arcussinuswerts einer komplexen Zahl
catanh, catanhf, catanhl Berechnet den komplexen hyperbolischen Arcustangens einer komplexen Zahl
ccosh, ccoshf, ccoshl Berechnen des komplexen hyperbolischen Cosinuswerts einer komplexen Zahl
csinh, csinhf, csinhl Berechnen des komplexen hyperbolischen Sinuswerts einer komplexen Zahl
ctanh, ctanhf, ctanhl Berechnet den komplexen hyperbolischen Tangens einer komplexen Zahl

Exponentielle und logarithmische Funktionen

Function Beschreibung
cexp, cexpf, cexpl Berechnen der Exponentialzahl zur Basis e einer komplexen Zahl
clog, clogf, clogl Berechnen des natürlichen Logarithmus zur Basis e einer komplexen Zahl
clog10, clog10f, clog10l Berechnen des Logarithmus zur Basis 10 einer komplexen Zahl

Potenzfunktionen und Absolutwertfunktionen

Function Beschreibung
cabs, cabsf, cabsl Berechnen des komplexen Absolutwerts (auch Norm, Modulo oder Größe genannt) für eine komplexe Zahl
cpow, cpowf, cpowl Berechnen der komplexen Leistungsfunktion
csqrt, csqrtf, csqrtl Berechnen der komplexen Quadratwurzel einer komplexen Zahl

Bearbeitungsfunktionen

Function Beschreibung
_Cbuild, _FCbuild, _LCbuild Erstellen einer komplexen Zahl aus realen und nicht realen Teilen
carg, cargf, cargl Berechnen des Arguments (also des Phasenwinkels) einer komplexen Zahl
cimag, cimagf, cimagl Berechnen des Imaginärteils einer komplexen Zahl
conj, conjf, conjl Berechnen der konjugierten Zahl einer komplexen Zahl
cproj, cprojf, cprojl Berechnen einer Projektion einer komplexen Zahl auf die Riemannsche Zahlenkugel
creal, crealf, creall Berechnen des Realteils einer komplexen Zahl
norm, normf, norml Berechnen der quadratischen Größe einer komplexen Zahl

Vorgangsfunktionen

Da komplexe Zahlen kein systemeigener Typ im Microsoft-Compiler sind, werden die standardmäßigen arithmetischen Operatoren nicht für komplexe Typen definiert. Der Einfachheit halber werden diese komplexen mathematischen Bibliotheksfunktionen bereitgestellt, um die beschränkte Bearbeitung komplexer Zahlen im Benutzercode zu ermöglichen:

Function Beschreibung
_Cmulcc, _FCmulcc, _LCmulcc Addition zweier komplexer Zahlen
_Cmulcr, _FCmulcr, _LCmulcr Multiplikation einer komplexe Zahl und einer Gleitkommazahl

Siehe auch

Typgenerische Mathematik
Universelle C-Laufzeitroutinen nach Kategorie