Delen via


Ondersteuning voor wiskundige en drijvende komma

De Universal C Runtime-bibliotheek (UCRT) biedt veel integrale en drijvende-komma wiskundige bibliotheekfuncties, waaronder alle functies die vereist zijn voor ISO C99. De drijvendekommafuncties worden geïmplementeerd om de prestaties te verdelen met juistheid. Omdat het produceren van het correct afgeronde resultaat verboden duur kan zijn, zijn deze functies ontworpen om efficiënt een nauwe benadering te produceren van het correct afgeronde resultaat. In de meeste gevallen is het resultaat dat wordt geproduceerd binnen +/-1 ULP (eenheid van minimale precisie) van het correct afgeronde resultaat, hoewel er gevallen kunnen zijn waarin er grotere onnauwkeurigheid is.

Voor ISO C Standard 11 (C11) en hoger biedt de <tgmath.h> header, naast het opnemen <math.h> en <complex.h>, macro's die een bijbehorende wiskundige functie aanroepen op basis van de typen parameters. Zie Type-generic wiskundige voor meer informatie.

Veel van de rekenbibliotheekfuncties met drijvende komma hebben verschillende implementaties voor verschillende CPU-architecturen. De 32-bits x86 CRT kan bijvoorbeeld een andere implementatie hebben dan de 64-bits x64 CRT. Daarnaast kunnen sommige functies meerdere implementaties hebben voor een bepaalde CPU-architectuur. De meest efficiënte implementatie wordt dynamisch geselecteerd tijdens runtime, afhankelijk van de instructiesets die door de CPU worden ondersteund. In de 32-bits x86 CRT hebben sommige functies bijvoorbeeld zowel een x87-implementatie als een SSE2-implementatie. Wanneer u een CPU gebruikt die ondersteuning biedt voor SSE2, wordt de snellere SSE2-implementatie gebruikt. Bij uitvoering op een CPU die geen ondersteuning biedt voor SSE2, wordt de tragere x87-implementatie gebruikt. Omdat verschillende implementaties van de wiskundige bibliotheekfuncties verschillende CPU-instructies en verschillende algoritmen kunnen gebruiken om hun resultaten te produceren, kunnen de functies verschillende resultaten opleveren voor CPU's. In de meeste gevallen bevinden de resultaten zich binnen +/-1 ULP van het correct afgeronde resultaat, maar de werkelijke resultaten kunnen per CPU verschillen.

Nieuwere versies van het UCRT kunnen de precisie en nauwkeurigheid van de rekenkundige bibliotheekfuncties met drijvende komma verbeteren. Omdat het UCRT deel uitmaakt van het Windows-besturingssysteem, krijgt u mogelijk verschillende resultaten voor deze functies op verschillende besturingssysteemversies of tussen foutopsporing en release-builds. Hoewel het niet wordt aanbevolen, kunt u statisch koppelen aan het UCRT om consistente resultaten te garanderen als u deze functies nodig hebt, overal identieke resultaten opleveren.

Vorige 16-bits versies van Microsoft C/C++ en Microsoft Visual C++ ondersteunden het long double type als een 80-bits drijvendekommagegevenstype. In latere versies van Visual C++ is het long double gegevenstype een 64-bits drijvendekommagegevenstype dat identiek is aan het double type. De compiler behandelt long double en double als afzonderlijke typen, maar de long double functies zijn identiek aan hun double tegenhangers. De CRT biedt long double versies van de wiskundige functies voor compatibiliteit met ISO C99-broncode, maar houd er rekening mee dat de binaire weergave kan verschillen van andere compilers.

Ondersteunde wiskundige en drijvende-kommaroutines

Routine Gebruik
abs, , , labsllabs_abs64 Berekent de absolute waarde van een geheel getaltype
acos, , acosfacosl Berekent de boogcosinus
acosh, , acoshfacoshl Berekent de cosinus hyperbolische boog
asin, , asinfasinl Berekent de boogsinus
asinh, , asinhfasinhl Berekent de sinus van de hyperbolische boog
atan, , atanfatanl, atan2, , , atan2fatan2l Berekent de boogtangens
atanh, , atanhfatanhl Berekent de tangens van de hyperbolische boog
_atodbl, _atodbl_l Converteert een landinstellingenspecifieke tekenreeks naar een double
atof, _atof_l Converteert een tekenreeks naar een double
_atoflt, , , _atoflt_l_atoldbl_atoldbl_l Converteert een landinstellingenspecifieke tekenreeks naar een float of long double
cbrt, , cbrtfcbrtl Berekent de kubushoofdmap
ceil, , ceilfceill Berekent het plafond
_chgsign, , _chgsignf_chgsignl Berekent de additieve inverse
_clear87, _clearfp Hiermee wordt het drijvendekommastatusregister ophaalt en gewist
_control87, , _controlfp__control87_2 Hiermee haalt u het besturingselementwoord met drijvende komma op en stelt u deze in
_controlfp_s Beveiligde versie van _controlfp
copysign, , copysignfcopysignl, _copysign, , , _copysignf_copysignl Retourneert een waarde met de grootte van het ene argument en het teken van een ander argument
cos, , cosfcosl Berekent de sinus
cosh, , coshfcoshl Berekent de sinus hyperbolicus
div, , ldivlldiv Berekent het quotiënt en de rest van twee gehele getallen
_ecvt, ecvt Converteert een double naar een tekenreeks
_ecvt_s Beveiligde versie van _ecvt
erf, , erfferfl Berekent de foutfunctie
erfc, , erfcferfcl Berekent de complementaire foutfunctie
exp, , expfexpl Berekent de exponentiële ex
exp2, , exp2fexp2l Berekent de exponentiële 2x
expm1, , expm1fexpm1l Berekent e x-1
fabs, , fabsffabsl Berekent de absolute waarde van een drijvende-kommatype
_fcvt, fcvt Converteert een drijvende-kommanummer naar een tekenreeks
_fcvt_s Beveiligde versie van _fcvt
fdim, , fdimffdiml Bepaalt het positieve verschil tussen twee waarden
feclearexcept Opgegeven drijvendekomma-uitzonderingen wissen
fegetenv Slaat de huidige drijvendekommaomgeving op
fegetexceptflag Hiermee haalt u de opgegeven uitzonderingsstatus voor drijvende komma op
fegetround Hiermee haalt u de afrondingsmodus met drijvende komma op
feholdexcept Hiermee stelt u de non-stop uitzonderingsmodus voor zwevende komma's in
feraiseexcept Hiermee worden de opgegeven drijvendekomma-uitzonderingen gemaakt
fesetenv Hiermee stelt u de huidige omgeving met drijvende komma in
fesetexceptflag Hiermee stelt u de opgegeven drijvendekommagestatusvlagmen in
fesetround Hiermee stelt u de opgegeven afrondingsmodus met drijvende komma in
fetestexcept Bepaalt welke drijvendekommage uitzonderingsstatusvlagmen zijn ingesteld
feupdateenv Herstelt een drijvende-kommaomgeving en genereert vervolgens eerdere uitzonderingen
floor, , floorffloorl Berekent de vloer
fma, , fmaffmal Berekent een samenvoeging van een vermenigvuldigings-add
fmax, , fmaxffmaxl Berekent het maximum van de argumenten
fmin, , fminffminl Berekent het minimum van de argumenten
fmod, , fmodffmodl Berekent de rest van het drijvende komma
_fpclass, _fpclassf Geeft als resultaat de classificatie van een drijvende-kommawaarde
fpclassify Geeft als resultaat de classificatie van een drijvende-kommawaarde
_fpieee_flt Hiermee stelt u een handler in voor uitzonderingen met drijvende komma
_fpreset Stelt de omgeving met drijvende komma opnieuw in
frexp, , frexpffrexpl Haalt de mantissa en exponent van een drijvendekommagetal
_gcvt, gcvt Converteert een drijvende-kommanummer naar een tekenreeks
_gcvt_s Beveiligde versie van _gcvt
_get_FMA3_enable, _set_FMA3_enable Hiermee haalt u een vlag op of stelt u een vlag in voor het gebruik van FMA3-instructies op x64
hypot, , hypotfhypotl, _hypot, , , _hypotf_hypotl Berekent de hypotenuse
ilogb, , ilogbfilogbl Berekent het gehele getal met grondtal 2 exponent
imaxabs Berekent de absolute waarde van een geheel getaltype
imaxdiv Berekent het quotiënt en de rest van twee gehele getallen
isfinite, , _finite_finitef Bepaalt of een waarde eindig is
isgreater, , isgreaterequalisless, islessequal, , , islessgreaterisunordered De volgorde van twee waarden met drijvende komma vergelijken
isinf Bepaalt of een drijvende-kommawaarde oneindig is
isnan, , _isnan_isnanf Test een drijvende-kommawaarde voor NaN
isnormal Test of een drijvende-kommawaarde zowel eindig als niet subnormaal is
_j0, , _j1_jn Berekent de Bessel-functie
ldexp, , ldexpfldexpl Berekent x*2n
lgamma, , lgammaflgammal Berekent de natuurlijke logaritme van de absolute waarde van de gammafunctie
llrint, , llrintfllrintl Rondt een drijvende-kommawaarde af op de dichtstbijzijnde long long waarde
llround, , llroundfllroundl Rondt een drijvende-kommawaarde af op de dichtstbijzijnde long long waarde
log, , logflogl, log10, , , log10flog10l Berekent de natuurlijke of base-10 logaritme
log1p, , log1pflog1pl Berekent de natuurlijke logaritme van 1+x
log2, , log2flog2l Berekent de logaritme met grondtal 2
logb logbf, logbl, _logb_logbf Geeft als resultaat de exponent van een drijvende-kommawaarde
lrint, , lrintflrintl Rondt een drijvende-kommawaarde af op de dichtstbijzijnde long waarde
_lrotl, _lrotr Hiermee draait u een geheel getal naar links of rechts
lround, , lroundflroundl Rondt een drijvende-kommawaarde af op de dichtstbijzijnde long waarde
_matherr De standaard-wiskundige fouthandler
__max Macro die de grotere van twee waarden retourneert
__min Macro die de kleinste van twee waarden retourneert
modf, , modffmodfl Splitst een drijvende-kommawaarde in fractionele en gehele getallen
nan, , nanfnanl Geeft als resultaat een stille NaN-waarde
nearbyint, , nearbyintfnearbyintl Retourneert de afgeronde waarde
nextafter nextafterf, nextafterl, _nextafter_nextafterf Retourneert de volgende vertegenwoordigbare drijvende-kommawaarde
nexttoward, , nexttowardfnexttowardl Retourneert de volgende vertegenwoordigbare drijvende-kommawaarde
pow, , powfpowl Geeft als resultaat de waarde van xy
remainder, , remainderfremainderl Berekent de rest van het quotiënt van twee drijvendekommawaarden
remquo, , remquofremquol Berekent de rest van twee gehele getallen
rint, , rintfrintl Rondt een drijvende-kommawaarde af
_rotl, , , _rotl64_rotr_rotr64 Hiermee worden bits in gehele getallen gedraaid
round, , roundfroundl Rondt een drijvende-kommawaarde af
_scalb, _scalbf Het argument schalen met een macht van 2
scalbn, , scalbnfscalbnl, scalbln, , , scalblnfscalblnl Vermenigvuldigt een drijvendekommagetal met een integraal vermogen van FLT_RADIX
_set_controlfp Hiermee stelt u het besturingselementwoord voor drijvende komma in
_set_SSE2_enable SSE2-instructies in- of uitschakelen
signbit Test de teken-bit van een drijvende-kommawaarde
sin, , sinfsinl Berekent de sinus
sinh, , sinhfsinhl Berekent de sinus hyperbolicus
sqrt, , sqrtfsqrtl Berekent de vierkantswortel
_status87, , _statusfp_statusfp2 Hiermee haalt u het statuswoord drijvende komma op
strtof, _strtof_l Converteert een tekenreeks naar een float
strtold, _strtold_l Converteert een tekenreeks naar een long double
tan, , tanftanl Berekent de tangens
tanh, , tanhftanhl Berekent de tangens hyperbolicus
tgamma, , tgammaftgammal Berekent de gammafunctie
trunc, , truncftruncl Kapt het breukdeel af
_wtof, _wtof_l Converteert een brede tekenreeks naar een double
_y0, , _y1_yn Berekent de Bessel-functie

Zie ook

Universal C-runtimeroutines per categorie
Primitieven met drijvende komma