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 direkt ein Schlüsselwort noch ein complex _Complex Schlüsselwort, 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

Funktion Beschreibung
cacos, cacosfcacosl Berechnen des komplexen Arcuscosinuswerts einer komplexen Zahl
casin, casinfcasinl Berechnen des komplexen Arcussinuswerts einer komplexen Zahl
catan, catanfcatanl Berechnen des komplexen Arcustangenswerts einer komplexen Zahl
ccos, ccosfccosl Berechnen des komplexen Cosinuswerts einer komplexen Zahl
csin, csinfcsinl Berechnen des komplexen Sinuswerts einer komplexen Zahl
ctan, ctanfctanl Berechnen des komplexen Tangenswerts einer komplexen Zahl

Hyperbolische Funktionen

Funktion Beschreibung
cacosh, cacoshfcacoshl Berechnen des komplexen hyperbolischen Arcuscosinuswerts einer komplexen Zahl
casinh, casinhfcasinhl Berechnen des komplexen hyperbolischen Arcussinuswerts einer komplexen Zahl
catanh, catanhfcatanhl Berechnet den komplexen hyperbolischen Arcustangens einer komplexen Zahl
ccosh, ccoshfccoshl Berechnen des komplexen hyperbolischen Cosinuswerts einer komplexen Zahl
csinh, csinhfcsinhl Berechnen des komplexen hyperbolischen Sinuswerts einer komplexen Zahl
ctanh, ctanhfctanhl Berechnet den komplexen hyperbolischen Tangens einer komplexen Zahl

Exponentielle und logarithmische Funktionen

Funktion Beschreibung
cexp, cexpfcexpl Berechnen der Exponentialzahl zur Basis e einer komplexen Zahl
clog, clogfclogl Berechnen des natürlichen Logarithmus zur Basis e einer komplexen Zahl
clog10, clog10fclog10l Berechnen des Logarithmus zur Basis 10 einer komplexen Zahl

Potenzfunktionen und Absolutwertfunktionen

Funktion Beschreibung
cabs, cabsfcabsl Berechnen des komplexen Absolutwerts (auch Norm, Modulo oder Größe genannt) für eine komplexe Zahl
cpow, cpowfcpowl Berechnen der komplexen Leistungsfunktion
csqrt, csqrtfcsqrtl Berechnen der komplexen Quadratwurzel einer komplexen Zahl

Bearbeitungsfunktionen

Funktion Beschreibung
_Cbuild, _FCbuild_LCbuild Erstellen einer komplexen Zahl aus realen und nicht realen Teilen
carg, cargfcargl Berechnen des Arguments (also des Phasenwinkels) einer komplexen Zahl
cimag, cimagfcimagl Berechnen des Imaginärteils einer komplexen Zahl
conj, conjfconjl Berechnen der konjugierten Zahl einer komplexen Zahl
cproj, cprojfcprojl Berechnen einer Projektion einer komplexen Zahl auf die Riemannsche Zahlenkugel
creal, crealfcreall Berechnen des Realteils einer komplexen Zahl
norm, normfnorml 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:

Funktion 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