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 , , 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 x y |
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