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 _complex
der für die _cabs
Funktion verwendet wird. Der struct _complex
Typ wird nicht von den entsprechenden komplexen mathematischen Funktionen cabs
, , cabsf
, cabsl
verwendet.
Komplexe Konstanten und Makros
I
wird als komplexer Typ _Fcomplex
definiert, der von { 0.0f, 1.0f }
.
Trigonometrische Funktionen
Funktion | 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
Funktion | 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
Funktion | 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
Funktion | 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
Funktion | 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:
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