Mathematische Unterstützung und Gleitkommaunterstützung

Die Universelle C-Runtime-Bibliothek (UCRT) bietet viele integrale und gleitkommabasierte mathematische Bibliotheksfunktionen, einschließlich aller Funktionen, die von ISO C99 benötigt werden. Die Gleitkommafunktionen werden implementiert, damit die Leistung und Richtigkeit gleichwertig sichergestellt wird. 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 ULP (Einheit der geringsten Genauigkeit) des korrekt gerundeten Ergebnisses, es kann jedoch vorkommen, dass es eine größere Ungenauigkeit gibt.

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. Ausführliche Informationen finden Sie unter Typgengenerische Mathematik.

Viele der Gleitkommafunktionen in der mathematischen Bibliothek 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.

16-Bit-Vorgängerversionen von Microsoft C/C++ und Microsoft Visual C++ unterstützten den Typ long double als einen Gleitkomma-Datentyp mit 80-Bit Präzision. In späteren Versionen von Visual C++ ist der long double-Datentyp ein 64-Bit-präziser Gleitkomma-Datentyp, der identisch mit Typ double ist. Der Compiler verarbeitet long double und double wie unterschiedliche Typen, die long double-Funktionen sind jedoch identisch mit ihren double-Gegenstücken. Die CRT stellt long double-Versionen der mathematischen Funktionen für die ISO C99-Quellcodekompatibilität bereit. Beachten Sie aber, dass die binäre Darstellung von anderen Compilern abweichen kann.

Unterstützte mathematische und Gleitkommaroutinen

Routine Zweck
abs, , labsllabs_abs64 Berechnet den absoluten Wert eines Ganzzahltyps
acos, acosfacosl Berechnet den Arkuskosinus
acosh, acoshfacoshl Berechnet den hyperbolischen Arkuskosinus
asin, asinfasinl Berechnet den Arkussinus
asinh, asinhfasinhl Berechnet den hyperbolischen Arkussinus
atan, , atanfatanl, atan2, , atan2fatan2l Berechnet den Arkustangens
atanh, atanhfatanhl Berechnet den hyperbolischen Arkustangens
_atodbl, _atodbl_l Konvertiert eine gebietsschemaspezifische Zeichenfolge in eine double
atof, _atof_l Konvertiert eine Zeichenfolge in eine double
_atoflt, , _atoflt_l_atoldbl_atoldbl_l Konvertiert eine gebietsschemaspezifische Zeichenfolge in eine float oder long double
cbrt, cbrtfcbrtl Berechnet die Kubikwurzel
ceil, ceilfceill Berechnet den Höchstwert
_chgsign, _chgsignf_chgsignl Berechnet das additive Inverse (Gegenzahl)
_clear87, _clearfp Ruft das Gleitkommastatusregister ab und löscht dieses
_control87, _controlfp__control87_2 Ruft das Gleitkommasteuerwort ab und legt es fest.
_controlfp_s Sichere Version von _controlfp
copysign, , copysignfcopysignl, _copysign, , _copysignf_copysignl Gibt einen Wert zurück, der die Größe eines Arguments und das Zeichen eines anderen Arguments aufweist
cos, cosfcosl Berechnet den Sinus
cosh, coshfcoshl Berechnet den hyperbolischen Sinus
div, ldivlldiv Berechnet den Quotienten und den Rest von zwei ganzzahligen Werten
_ecvt, ecvt Konvertiert eine double Zeichenfolge in eine Zeichenfolge.
_ecvt_s Sichere Version von _ecvt
erf, erfferfl Berechnet die Fehlerfunktion
erfc, erfcferfcl Berechnet die komplementäre Fehlerfunktion
exp, expfexpl Berechnet den exponentiellen Wert ex
exp2, exp2fexp2l Berechnet den exponentiellen Wert 2x
expm1, expm1fexpm1l Berechnet ex-1
fabs, fabsffabsl Berechnet den absoluten Wert eines Gleitkommatyps
_fcvt, fcvt Konvertiert eine Gleitkommazahl in eine Zeichenfolge
_fcvt_s Sichere Version von _fcvt
fdim, fdimffdiml Bestimmt den positiven Unterschied zwischen zwei Werten
feclearexcept Löscht die angegebenen Gleitkommaausnahmen
fegetenv Speichert die aktuelle Gleitkommaausnahme
fegetexceptflag Ruft den Status der angegebenen Gleitkommaausnahme ab
fegetround Ruft den Rundungsmodus des Gleitkommas ab
feholdexcept Legt den ununterbrochenen Modus der Gleitkommaausnahme fest
feraiseexcept Löst die angegebenen Gleitkommaausnahmen aus
fesetenv Legt die aktuelle Gleitkommaumgebung fest
fesetexceptflag Legt die angegebenen Gleitkomma-Statusflags fest
fesetround Legt den angegebenen Rundungsmodus des Gleitkommas fest
fetestexcept Bestimmt, welche Gleitkommaausnahme-Statusflags festgelegt werden
feupdateenv Stellt eine Gleitkommaumgebung wieder her und löst dann vorherige Ausnahmen aus
floor, floorffloorl Berechnet den Tiefstwert
fma, fmaffmal Berechnet eine Fused-multiply-add-Operation
fmax, fmaxffmaxl Berechnet die maximale Anzahl der Argumente
fmin, fminffminl Berechnet das Minimum der Argumente.
fmod, fmodffmodl Berechnet den Gleitkommarest
_fpclass, _fpclassf Gibt die Klassifizierung eines Gleitkommawerts zurück
fpclassify Gibt die Klassifizierung eines Gleitkommawerts zurück
_fpieee_flt Legt einen Handler für Gleitkommaausnahmen fest
_fpreset Setzt die Gleitkommaumgebung zurück
frexp, frexpffrexpl Ruft die Mantisse und den Exponenten einer Gleitkommazahl ab
_gcvt, gcvt Konvertiert eine Gleitkommazahl in eine Zeichenfolge
_gcvt_s Sichere Version von _gcvt
_get_FMA3_enable, _set_FMA3_enable Ruft ein Flag für die Verwendung von FMA3-Anweisungen auf x64 ab, oder legt es fest
hypot, , hypotfhypotl, _hypot, , _hypotf_hypotl Berechnet die Hypotenuse
ilogb, ilogbfilogbl Berechnet den ganzzahligen Exponenten zur Basis 2
imaxabs Berechnet den absoluten Wert eines Ganzzahltyps
imaxdiv Berechnet den Quotienten und den Rest von zwei ganzzahligen Werten
isfinite, _finite_finitef Bestimmt, ob ein Wert endlich ist
isgreater, , isgreaterequalisless, islessequal, , islessgreaterisunordered Reihenfolge zweier Gleitkommawerte vergleichen
isinf Bestimmt, ob ein Gleitkommawert endlich ist
isnan, _isnan_isnanf Testet einen Gleitkommawert auf NaN
isnormal Testet, ob ein Gleitkommawert sowohl unendlich als auch subnormal ist
_j0, _j1_jn Berechnet die Bessel-Funktion
ldexp, ldexpfldexpl Berechnet x*2n
lgamma, lgammaflgammal Berechnet den natürlichen Logarithmus des absoluten Werts der Gammafunktion
llrint, llrintfllrintl Rundet einen Gleitkommawert auf den nächsten long long Wert ab.
llround, llroundfllroundl Rundet einen Gleitkommawert auf den nächsten long long Wert ab.
log, , logflogl, log10, , log10flog10l Berechnet den natürlichen Logarithmus oder den Logarithmus zur Basis 10
log1p, log1pflog1pl Berechnet den natürlichen Logarithmus von 1+x
log2, log2flog2l Berechnet den Logarithmus zur Basis 2
logb, , logbflogbl, , _logb_logbf Gibt den Exponenten eines Gleitkommawerts zurück
lrint, lrintflrintl Rundet einen Gleitkommawert auf den nächsten long Wert ab.
_lrotl, _lrotr Rotiert einen ganzzahligen Wert nach links oder rechts
lround, lroundflroundl Rundet einen Gleitkommawert auf den nächsten long Wert ab.
_matherr Der Standardhandler für mathematische Fehler
__max Ein Makro, das den größeren von zwei Werten zurückgibt
__min Ein Makro, das den kleineren von zwei Werten zurückgibt
modf, modffmodfl Teilt einen Gleitkommawert in Nachkommastellen und ganze Zahlen
nan, nanfnanl Gibt einen stillen NaN-Wert zurück.
nearbyint, nearbyintfnearbyintl Gibt den gerundeten Wert zurück
nextafter, , nextafterfnextafterl, , _nextafter_nextafterf Gibt den nächsten darstellbaren Gleitkommawert zurück
nexttoward, nexttowardfnexttowardl Gibt den nächsten darstellbaren Gleitkommawert zurück
pow, powfpowl Gibt den Wert von xy
remainder, remainderfremainderl Berechnet den Rest des Quotienten aus zwei Gleitkommawerten
remquo, remquofremquol Berechnet den Rest von zwei ganzzahligen Werten
rint, rintfrintl Rundet einen Gleitkommawert
_rotl, , _rotl64_rotr_rotr64 Rotiert Bits in ganzzahligen Typen
round, roundfroundl Rundet einen Gleitkommawert
_scalb, _scalbf Skaliert das Argument mit einer Zweierpotenz
scalbn, , scalbnfscalbnl, scalbln, , scalblnfscalblnl Multipliziert eine Gleitkommazahl durch eine integrale Potenz von FLT_RADIX
_set_controlfp Legt das Gleitkommasteuerwort fest
_set_SSE2_enable Aktiviert oder deaktiviert SSE2-Anweisungen
signbit Testet das Vorzeichenbit eines Gleitkommawerts
sin, sinfsinl Berechnet den Sinus
sinh, sinhfsinhl Berechnet den hyperbolischen Sinus
sqrt, sqrtfsqrtl Berechnet die Quadratwurzel
_status87, _statusfp_statusfp2 Ruft das Gleitkommastatuswort ab
strtof, _strtof_l Konvertiert eine Zeichenfolge in eine float
strtold, _strtold_l Konvertiert eine Zeichenfolge in eine long double
tan, tanftanl Berechnet den Tangens
tanh, tanhftanhl Berechnet den hyperbolischen Tangens
tgamma, tgammaftgammal Berechnet die Gammafunktion
trunc, truncftruncl Verkürzt die Nachkommastellen
_wtof, _wtof_l Konvertiert eine breite Zeichenfolge in eine double
_y0, _y1_yn Berechnet die Bessel-Funktion

Siehe auch

Universelle C-Laufzeitroutinen nach Kategorie
Gleitkommaprimitive