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 "Typgenerika" .

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 Verwendung
abs, labs, llabs, _abs64 Berechnet den absoluten Wert eines Ganzzahltyps
acos, acosf, acosl Berechnet den Arkuskosinus
acosh, acoshf, acoshl Berechnet den hyperbolischen Arkuskosinus
asin, asinf, asinl Berechnet den Arkussinus
asinh, asinhf, asinhl Berechnet den hyperbolischen Arkussinus
atan, atanf, atanl, atan2, atan2f, atan2l Berechnet den Arkustangens
atanh, atanhf, atanhl 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, cbrtf, cbrtl Berechnet die Kubikwurzel
ceil, ceilf, ceill 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, copysignf, copysignl, _copysign, _copysignf, _copysignl Gibt einen Wert zurück, der die Größe eines Arguments und das Zeichen eines anderen Arguments aufweist
cos, cosf, cosl Berechnet den Sinus
cosh, coshf, coshl Berechnet den hyperbolischen Sinus
div, ldiv, lldiv 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, erff, erfl Berechnet die Fehlerfunktion
erfc, erfcf, erfcl Berechnet die komplementäre Fehlerfunktion
exp, expf, expl Berechnet den exponentiellen Wert ex
exp2, exp2f, exp2l Berechnet den exponentiellen Wert 2x
expm1, expm1f, expm1l Berechnet ex-1
fabs, fabsf, fabsl Berechnet den absoluten Wert eines Gleitkommatyps
_fcvt, fcvt Konvertiert eine Gleitkommazahl in eine Zeichenfolge
_fcvt_s Sichere Version von _fcvt
fdim, fdimf, fdiml 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, floorf, floorl Berechnet den Tiefstwert
fma, fmaf, fmal Berechnet eine Fused-multiply-add-Operation
fmax, fmaxf, fmaxl Berechnet die maximale Anzahl der Argumente
fmin, fminf, fminl Berechnet das Minimum der Argumente.
fmod, fmodf, fmodl 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, frexpf, frexpl 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, hypotf, hypotl, _hypot, _hypotf, _hypotl Berechnet die Hypotenuse
ilogb, ilogbf, ilogbl 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, isgreaterequal, isless, islessequal, islessgreater, isunordered 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, ldexpf, ldexpl Berechnet x*2n
lgamma, lgammaf, lgammal Berechnet den natürlichen Logarithmus des absoluten Werts der Gammafunktion
llrint, llrintf, llrintl Rundet einen Gleitkommawert auf den nächsten long long Wert ab.
llround, llroundf, llroundl Rundet einen Gleitkommawert auf den nächsten long long Wert ab.
log, logf, logl, log10, log10f, log10l Berechnet den natürlichen Logarithmus oder den Logarithmus zur Basis 10
log1p, log1pf, log1pl Berechnet den natürlichen Logarithmus von 1+x
log2, log2f, log2l Berechnet den Logarithmus zur Basis 2
logb, logbf, logbl, _logb, _logbf Gibt den Exponenten eines Gleitkommawerts zurück
lrint, lrintf, lrintl Rundet einen Gleitkommawert auf den nächsten long Wert ab.
_lrotl, _lrotr Rotiert einen ganzzahligen Wert nach links oder rechts
lround, lroundf, lroundl 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, modff, modfl Teilt einen Gleitkommawert in Nachkommastellen und ganze Zahlen
nan, nanf, nanl Gibt einen stillen NaN-Wert zurück.
nearbyint, nearbyintf, nearbyintl Gibt den gerundeten Wert zurück
nextafter, nextafterf, nextafterl, _nextafter, _nextafterf Gibt den nächsten darstellbaren Gleitkommawert zurück
nexttoward, nexttowardf, nexttowardl Gibt den nächsten darstellbaren Gleitkommawert zurück
pow, powf, powl Gibt den Wert von xy
remainder, remainderf, remainderl Berechnet den Rest des Quotienten aus zwei Gleitkommawerten
remquo, remquof, remquol Berechnet den Rest von zwei ganzzahligen Werten
rint, rintf, rintl Rundet einen Gleitkommawert
_rotl, _rotl64, _rotr, _rotr64 Rotiert Bits in ganzzahligen Typen
round, roundf, roundl Rundet einen Gleitkommawert
_scalb, _scalbf Skaliert das Argument mit einer Zweierpotenz
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl 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, sinf, sinl Berechnet den Sinus
sinh, sinhf, sinhl Berechnet den hyperbolischen Sinus
sqrt, sqrtf, sqrtl 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, tanf, tanl Berechnet den Tangens
tanh, tanhf, tanhl Berechnet den hyperbolischen Tangens
tgamma, tgammaf, tgammal Berechnet die Gammafunktion
trunc, truncf, truncl 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