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 , , acosf acosl |
Beräknar bågens cosinus |
acosh , , acoshf acoshl |
Beräknar den hyperboliska arc-cosinusen |
asin , , asinf asinl |
Beräknar bågens sinus |
asinh , , asinhf asinhl |
Beräknar hyperbolisk arc sinus |
atan , atanf , atanl , atan2 , , atan2f , atan2l |
Beräknar bågens tangens |
atanh , , atanhf atanhl |
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 , , cbrtf cbrtl |
Beräknar kubroten |
ceil , , ceilf ceill |
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 , , cosf cosl |
Beräknar sinus |
cosh , , coshf coshl |
Beräknar hyperbolisk sinus |
div , , ldiv lldiv |
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 , , erff erfl |
Beräknar felfunktionen |
erfc , , erfcf erfcl |
Beräknar den kompletterande felfunktionen |
exp , , expf expl |
Beräknar exponentiell ex |
exp2 , , exp2f exp2l |
Beräknar exponentiellt 2x |
expm1 , , expm1f expm1l |
Beräknar ex-1 |
fabs , , fabsf fabsl |
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 , , fdimf fdiml |
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 , , floorf floorl |
Beräknar golvet |
fma , , fmaf fmal |
Beräknar en sammansvetsad multiplikationstillägg |
fmax , , fmaxf fmaxl |
Beräknar maximalt antal argument |
fmin , , fminf fminl |
Beräknar det minsta antalet argument |
fmod , , fmodf fmodl |
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 , , frexpf frexpl |
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 , , ilogbf ilogbl |
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 , , ldexpf ldexpl |
Beräknar x*2n |
lgamma , , lgammaf lgammal |
Beräknar den naturliga logaritmen för det absoluta värdet för gammafunktionen |
llrint , , llrintf llrintl |
Avrundar ett flyttalsvärde till närmaste long long värde |
llround , , llroundf llroundl |
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 , , log1pf log1pl |
Beräknar den naturliga logaritmen på 1+x |
log2 , , log2f log2l |
Beräknar base-2-logaritmen |
logb , logbf , logbl , , , _logb _logbf |
Returnerar exponenten för ett flyttalsvärde |
lrint , , lrintf lrintl |
Avrundar ett flyttalsvärde till närmaste long värde |
_lrotl , _lrotr |
Roterar ett heltalsvärde åt vänster eller höger |
lround , , lroundf lroundl |
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 , , modff modfl |
Delar upp ett flyttalsvärde i delar av bråk och heltal |
nan , , nanf nanl |
Returnerar ett tyst NaN-värde |
nearbyint , , nearbyintf nearbyintl |
Returnerar det avrundade värdet |
nextafter , nextafterf , nextafterl , , , _nextafter _nextafterf |
Returnerar nästa representerande flyttalsvärde |
nexttoward , , nexttowardf nexttowardl |
Returnerar nästa representerande flyttalsvärde |
pow , , powf powl |
Returnerar värdet för x y |
remainder , , remainderf remainderl |
Beräknar resten av kvoten för två flyttalsvärden |
remquo , , remquof remquol |
Beräknar resten av två heltalsvärden |
rint , , rintf rintl |
Avrundar ett flyttalsvärde |
_rotl , _rotl64 , , _rotr _rotr64 |
Roterar bitar i heltalstyper |
round , , roundf roundl |
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 , , sinf sinl |
Beräknar sinus |
sinh , , sinhf sinhl |
Beräknar hyperbolisk sinus |
sqrt , , sqrtf sqrtl |
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 , , tanf tanl |
Beräknar tangenten |
tanh , , tanhf tanhl |
Beräknar hyperbolisk tangens |
tgamma , , tgammaf tgammal |
Beräknar gammafunktionen |
trunc , , truncf truncl |
Trunkerar bråkdelen |
_wtof , _wtof_l |
Konverterar en bred sträng till en double |
_y0 , , _y1 _yn |
Beräknar funktionen Bessel |