Dela via


Stöd för matematik och flyttals

Universal C Runtime-biblioteket (UCRT) innehåller många integrerade och flytande matematiska biblioteksfunktioner, inklusive alla funktioner som krävs av ISO C99. Flyttalsfunktionerna implementeras för att balansera prestanda med korrekthet. Eftersom det kan vara oöverkomligt dyrt att producera det korrekt rundade resultatet är dessa funktioner utformade för att effektivt ge en nära uppskattning av det korrekt rundade resultatet. I de flesta fall ligger resultatet inom +/-1 ULP (enhet med minst precision) för det korrekt avrundade resultatet, även om det kan finnas fall där det finns större felaktighet.

För ISO C Standard 11 (C11) och senare <tgmath.h> innehåller rubriken, förutom att inkludera <math.h> och <complex.h>, makron som anropar en motsvarande matematisk funktion baserat på parametrarnas typer. Mer information finns i type-generic math.

Många av funktionerna i flyttalsmatikbiblioteket har olika implementeringar för olika CPU-arkitekturer. Till exempel kan 32-bitars x86 CRT ha en annan implementering än 64-bitars x64 CRT. Dessutom kan vissa av funktionerna ha flera implementeringar för en viss CPU-arkitektur. Den mest effektiva implementeringen väljs dynamiskt vid körning beroende på de instruktionsuppsättningar som stöds av processorn. I 32-bitars x86 CRT har vissa funktioner till exempel både en x87-implementering och en SSE2-implementering. När du kör på en processor som stöder SSE2 används den snabbare SSE2-implementeringen. När du kör på en processor som inte stöder SSE2 används den långsammare x87-implementeringen. Eftersom olika implementeringar av matematiska biblioteksfunktioner kan använda olika CPU-instruktioner och olika algoritmer för att generera sina resultat kan funktionerna ge olika resultat mellan processorer. I de flesta fall ligger resultaten inom +/-1 ULP för det korrekt avrundade resultatet, men de faktiska resultaten kan variera mellan processorer.

Nyare versioner av UCRT kan förbättra precisionen och noggrannheten för funktionerna i flyttalsmatikbiblioteket. Eftersom UCRT är en del av Windows-operativsystemet kan du få olika resultat för dessa funktioner i olika operativsystemversioner eller mellan felsöknings- och versionsversioner. Även om det inte rekommenderas kan du statiskt länka till UCRT för att garantera konsekventa resultat om du behöver dessa funktioner ger identiska resultat överallt.

Tidigare 16-bitarsversioner av Microsoft C/C++ och Microsoft Visual C++ stödde long double typen som en 80-bitars precisions flyttaldatatyp. I senare versioner av Visual C++ long double är datatypen en 64-bitars flyttal med precision som är identisk med double typen. Kompilatorn behandlar long double och double som distinkta typer, men long double funktionerna är identiska med deras double motsvarigheter. CRT tillhandahåller long double versioner av matematiska funktioner för ISO C99-källkodskompatibilitet, men observera att den binära representationen kan skilja sig från andra kompilatorer.

Matematik- och flyttalsrutiner som stöds

Rutin Använd
abs, labs, , llabs_abs64 Beräknar det absoluta värdet för en heltalstyp
acos, , acosfacosl Beräknar bågens cosinus
acosh, , acoshfacoshl Beräknar den hyperboliska arc-cosinusen
asin, , asinfasinl Beräknar bågens sinus
asinh, , asinhfasinhl Beräknar hyperbolisk arc sinus
atan, atanf, atanl, atan2, , atan2f, atan2l Beräknar bågens tangens
atanh, , atanhfatanhl Beräknar hyperbolisk arc tangens
_atodbl, _atodbl_l Konverterar en språkspecifik sträng till en double
atof, _atof_l Konverterar en sträng till en double
_atoflt, _atoflt_l, , _atoldbl_atoldbl_l Konverterar en språkspecifik sträng till en float eller long double
cbrt, , cbrtfcbrtl Beräknar kubroten
ceil, , ceilfceill Beräknar taket
_chgsign, , _chgsignf_chgsignl Beräknar additiv invertering
_clear87, _clearfp Hämtar och rensar flyttalsstatusregistret
_control87, , _controlfp__control87_2 Hämtar och anger flyttalskontrollens ord
_controlfp_s Säker version av _controlfp
copysign, copysignf, copysignl, _copysign, , _copysignf, _copysignl Returnerar ett värde som har storleken på ett argument och tecknet på ett annat
cos, , cosfcosl Beräknar sinus
cosh, , coshfcoshl Beräknar hyperbolisk sinus
div, , ldivlldiv Beräknar kvoten och resten av två heltalsvärden
_ecvt, ecvt Konverterar en double till en sträng
_ecvt_s Säker version av _ecvt
erf, , erfferfl Beräknar felfunktionen
erfc, , erfcferfcl Beräknar den kompletterande felfunktionen
exp, , expfexpl Beräknar exponentiell ex
exp2, , exp2fexp2l Beräknar exponentiellt 2x
expm1, , expm1fexpm1l Beräknar ex-1
fabs, , fabsffabsl Beräknar det absoluta värdet för en flyttalstyp
_fcvt, fcvt Konverterar ett flyttalsnummer till en sträng
_fcvt_s Säker version av _fcvt
fdim, , fdimffdiml Avgör den positiva skillnaden mellan två värden
feclearexcept Rensar angivna undantag för flyttal
fegetenv Lagrar den aktuella flyttalsmiljön
fegetexceptflag Hämtar den angivna undantagsstatusen för flyttals
fegetround Hämtar avrundningsläget för flyttals
feholdexcept Anger undantagsläge för icke-stopp flyttal
feraiseexcept Genererar de angivna undantagen för flyttals
fesetenv Anger den aktuella flyttalsmiljön
fesetexceptflag Anger de angivna flyttalsstatusflaggorna
fesetround Anger det angivna avrundningsläget för flyttals
fetestexcept Avgör vilka undantagsstatusflaggor för flyttal som anges
feupdateenv Återställer en flyttalmiljö och genererar sedan tidigare undantag
floor, , floorffloorl Beräknar golvet
fma, , fmaffmal Beräknar en sammansvetsad multiplikationstillägg
fmax, , fmaxffmaxl Beräknar maximalt antal argument
fmin, , fminffminl Beräknar det minsta antalet argument
fmod, , fmodffmodl Beräknar resten av flyttalsen
_fpclass, _fpclassf Returnerar klassificeringen av ett flyttalsvärde
fpclassify Returnerar klassificeringen av ett flyttalsvärde
_fpieee_flt Anger en hanterare för undantag från flyttals
_fpreset Återställer flyttalsmiljön
frexp, , frexpffrexpl Hämtar mantissa och exponent för ett flyttalsnummer
_gcvt, gcvt Konverterar ett flyttalsnummer till en sträng
_gcvt_s Säker version av _gcvt
_get_FMA3_enable, _set_FMA3_enable Hämtar eller anger en flagga för användning av FMA3-instruktioner på x64
hypot, hypotf, hypotl, _hypot, , _hypotf, _hypotl Beräknar hypotenuse
ilogb, , ilogbfilogbl Beräknar heltalsbas-2-exponenten
imaxabs Beräknar det absoluta värdet för en heltalstyp
imaxdiv Beräknar kvoten och resten av två heltalsvärden
isfinite, , _finite_finitef Avgör om ett värde är begränsat
isgreater, isgreaterequal, isless, islessequal, , islessgreater, isunordered Jämför ordningen på två flyttalsvärden
isinf Avgör om ett flyttalsvärde är oändligt
isnan, , _isnan_isnanf Testar ett flyttalsvärde för NaN
isnormal Testar om ett flyttalsvärde är både begränsat och inte subnormalt
_j0, , _j1_jn Beräknar funktionen Bessel
ldexp, , ldexpfldexpl Beräknar x*2n
lgamma, , lgammaflgammal Beräknar den naturliga logaritmen för det absoluta värdet för gammafunktionen
llrint, , llrintfllrintl Avrundar ett flyttalsvärde till närmaste long long värde
llround, , llroundfllroundl Avrundar ett flyttalsvärde till närmaste long long värde
log, logf, logl, log10, , log10f, log10l Beräknar den naturliga logaritmen eller base-10-logaritmen
log1p, , log1pflog1pl Beräknar den naturliga logaritmen på 1+x
log2, , log2flog2l Beräknar base-2-logaritmen
logb, logbf, logbl, , , _logb_logbf Returnerar exponenten för ett flyttalsvärde
lrint, , lrintflrintl Avrundar ett flyttalsvärde till närmaste long värde
_lrotl, _lrotr Roterar ett heltalsvärde åt vänster eller höger
lround, , lroundflroundl Avrundar ett flyttalsvärde till närmaste long värde
_matherr Standardhanteraren för matematiska fel
__max Makro som returnerar det större av två värden
__min Makro som returnerar det mindre av två värden
modf, , modffmodfl Delar upp ett flyttalsvärde i delar av bråk och heltal
nan, , nanfnanl Returnerar ett tyst NaN-värde
nearbyint, , nearbyintfnearbyintl Returnerar det avrundade värdet
nextafter, nextafterf, nextafterl, , , _nextafter_nextafterf Returnerar nästa representerande flyttalsvärde
nexttoward, , nexttowardfnexttowardl Returnerar nästa representerande flyttalsvärde
pow, , powfpowl Returnerar värdet för xy
remainder, , remainderfremainderl Beräknar resten av kvoten för två flyttalsvärden
remquo, , remquofremquol Beräknar resten av två heltalsvärden
rint, , rintfrintl Avrundar ett flyttalsvärde
_rotl, _rotl64, , _rotr_rotr64 Roterar bitar i heltalstyper
round, , roundfroundl Avrundar ett flyttalsvärde
_scalb, _scalbf Skalningsargument med kraften 2
scalbn, scalbnf, scalbnl, scalbln, , scalblnf, scalblnl Multiplicerar ett flyttalsnummer med en integrerad effekt av FLT_RADIX
_set_controlfp Anger flyttalskontrollens ord
_set_SSE2_enable Aktiverar eller inaktiverar SSE2-instruktioner
signbit Testar teckenbiten för ett flyttalsvärde
sin, , sinfsinl Beräknar sinus
sinh, , sinhfsinhl Beräknar hyperbolisk sinus
sqrt, , sqrtfsqrtl Beräknar kvadratroten
_status87, , _statusfp_statusfp2 Hämtar flyttalsstatusordet
strtof, _strtof_l Konverterar en sträng till en float
strtold, _strtold_l Konverterar en sträng till en long double
tan, , tanftanl Beräknar tangenten
tanh, , tanhftanhl Beräknar hyperbolisk tangens
tgamma, , tgammaftgammal Beräknar gammafunktionen
trunc, , truncftruncl Trunkerar bråkdelen
_wtof, _wtof_l Konverterar en bred sträng till en double
_y0, , _y1_yn Beräknar funktionen Bessel

Se även

Universal C-körningsrutiner efter kategori
Flyttalsprimiter