Typgenerische Mathematik
Für ISO C Standard 11 (C11) und höher stellt der <tgmath.h>
Header zusätzlich zum Einschließen und <complex.h>
Bereitstellen <math.h>
von Makros, die eine entsprechende mathematische Funktion basierend auf den Parametertypen aufrufen, bereit.
Mathematische C-Laufzeitbibliotheksfunktionen kommen in echten und komplexen Varianten. Jede Variante kommt in drei Varianten, je nach Art des Arguments: float
, , double
und long double
. Da C die Überladung wie C++ nicht unterstützt, weist jede Variante einen anderen Namen auf. Um z. B. den absoluten Wert eines echten Gleitkommawerts abzurufen, rufen Sie entweder fabsf
, oder fabs
fabsl
je nachdem, ob Sie einen float
, double
oder long double
einen Wert übergeben. Um den komplexen absoluten Wert zu erhalten, rufen Sie einen von cabsf
, cabs
oder cabsl
je nachdem, ob Sie einen float
, double
, bzw long double
. komplexen Wert übergeben. Wenn die Argumente nicht mit einem der oben genannten Typen übereinstimmen, wird die Funktion so ausgewählt, als ob die Argumente doppelt waren.
<tgmath.h>
enthält Makros, die die Auswahl der richtigen mathematischen Funktion vereinfachen, die aufgerufen werden soll. Die Makros untersuchen den Typ, den sie übergeben werden, und rufen dann die richtige Funktion auf. Beispielsweise bindet das sqrt
Makro an sqrtf()
sqrt(9.9f)
, aber es wird an sqrt(9.9)
sqrt()
. Wenn mindestens ein Makroargument für einen generischen Parameter komplex ist, bindet das Makro an eine komplexe Funktion. andernfalls wird eine echte Funktion aufgerufen.
Die Typgenerika-Makros <tgmath.h>
ermöglichen es Ihnen, portierbareren Code zu schreiben, da Sie die Umwandlung oder Auswahl unterschiedlicher Funktionsnamen nicht je nach Argumenttyp verwalten müssen.
Diese Makros befinden sich in ihrer eigenen Kopfzeile, sodass Programme, die mit der <math.h>
Kopfzeile geschrieben wurden, nicht umbrechen. Verhält sich also double x = sin(42);
wie immer, wenn Sie math.h> einschließen<. Dennoch werden die meisten vorhandenen C-Programme erwartet, dass sie nicht betroffen sind, wenn der <tgmath.h>
Header anstelle von <math.h>
oder <complex.h>
.
In der folgenden Tabelle sind die Makros aufgeführt, in <tgmath.h>
denen sie verfügbar sind und auf welche Elemente sie erweitert werden. modf
ist in dieser Tabelle nicht enthalten, da es nicht über ein entsprechendes typgeneratives Makro verfügt, da es nicht klar ist, wie es sicher ist, ohne die Typauflösung zu erschweren.
Anforderungen
Kompilieren Sie mit /std:c11
.
Windows SDK 10.0.20348.0 (Version 2104) oder höher. Informationen zum Herunterladen des neuesten SDK finden Sie unter Windows SDK. Anweisungen zum Installieren und Verwenden des SDK für die C11- und C17-Entwicklung finden Sie unter Installieren der Unterstützung für C11 und C17 in Visual Studio.