Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 |