Sdílet prostřednictvím


Podpora pro matematiku a plovoucí desetinou čárku

Knihovna UCRT (Universal C Runtime Library) poskytuje mnoho integrálních a plovoucích funkcí matematické knihovny, včetně všech funkcí vyžadovaných iso C99. Funkce s plovoucí desetinou čárkou se implementují pro vyvážení výkonu se správností. Vzhledem k tomu, že vytvoření správně zaokrouhleného výsledku může být příliš nákladné, jsou tyto funkce navrženy tak, aby efektivně vytvářely blízkou aproximaci správně zaokrouhleného výsledku. Ve většině případů se výsledek vytvoří v rozsahu +/-1 ULP (jednotka nejmenší přesnosti) správně zaokrouhleného výsledku, i když může docházet k případům, kdy je větší nepřesnost.

V případě standardu ISO C 11 (C11) a novější hlavička <tgmath.h> kromě zahrnutí <math.h> a <complex.h>poskytuje makra, která vyvolávají odpovídající matematickou funkci na základě typů parametrů. Podrobnosti najdete v tématu Matematika pro obecné typy.

Mnoho funkcí matematické knihovny s plovoucí desetinou čárkou má různé implementace pro různé architektury procesoru. Například 32bitová verze x86 CRT může mít jinou implementaci než 64bitová verze x64 CRT. Některé funkce navíc můžou mít několik implementací pro danou architekturu procesoru. Nejúčinnější implementace je vybrána dynamicky za běhu v závislosti na sadách instrukcí podporovaných procesorem. Například v 32bitovém x86 CRT mají některé funkce implementaci x87 i implementaci SSE2. Při spouštění na procesoru, který podporuje SSE2, se použije rychlejší implementace SSE2. Při spouštění na procesoru, který nepodporuje SSE2, se používá pomalejší implementace x87. Vzhledem k tomu, že různé implementace funkcí matematické knihovny mohou k vytvoření výsledků použít různé instrukce procesoru a různé algoritmy, můžou funkce vytvářet různé výsledky napříč procesory. Ve většiněpřípadůch

Předchozí 16bitové verze Microsoft C/C++ a Microsoft Visual C++ podporovaly long double typ jako datový typ s plovoucí desetinnou čárkou s přesností na 80 bitů. V novějších verzích visual C++ long double je datový typ 64bitové přesnosti s plovoucí desetinnou čárkou identický s typem double . Kompilátor pracuje s long double double různými typy, ale long double funkce jsou identické s jejich double protějšky. CRT poskytuje long double verze matematických funkcí pro kompatibilitu zdrojového kódu ISO C99, ale všimněte si, že binární reprezentace se může lišit od jiných kompilátorů.

Podporované matematické rutiny a rutiny s plovoucí desetinou čárkou

Rutina Používání
abs, labs, , llabs_abs64 Vypočítá absolutní hodnotu celočíselného typu.
acos, , acosfacosl Vypočítá kosinus oblouku.
acosh, , acoshfacoshl Vypočítá hyperbolický kosinus arkus.
asin, , asinfasinl Vypočítá arkus sinus.
asinh, , asinhfasinhl Vypočítá hyperbolický arkusový sinus.
atan, atanf, atanl, atan2, , atan2fatan2l Vypočítá arkus tangens.
atanh, , atanhfatanhl Vypočítá hyperbolický arkus tangens.
_atodbl, _atodbl_l Převede řetězec specifický pro národní prostředí na double
atof, _atof_l Převede řetězec na double
_atoflt, _atoflt_l, , _atoldbl_atoldbl_l Převede řetězec specifický pro národní prostředí na nebo floatlong double
cbrt, , cbrtfcbrtl Vypočítá kořen datové krychle.
ceil, , ceilfceill Vypočítá strop.
_chgsign, , _chgsignf_chgsignl Vypočítá přídavnou inverzní funkci.
_clear87, _clearfp Získá a vymaže registraci stavu s plovoucí desetinou čárkou.
_control87, , _controlfp__control87_2 Získá a nastaví řídicí slovo s plovoucí desetinou čárkou.
_controlfp_s Zabezpečená verze _controlfp
copysign, copysignf, copysignl, _copysign, , _copysignf_copysignl Vrátí hodnotu, která má velikost jednoho argumentu a znaménko druhého argumentu.
cos, , cosfcosl Vypočítá sinus.
cosh, , coshfcoshl Vypočítá hyperbolický sinus.
div, , ldivlldiv Vypočítá podíl a zbytek dvou celočíselné hodnoty.
_ecvt, ecvt Převede řetězec double na řetězec.
_ecvt_s Zabezpečená verze _ecvt
erf, , erfferfl Vypočítá chybovou funkci.
erfc, , erfcferfcl Vypočítá doplňkovou chybovou funkci.
exp, , expfexpl Vypočítá exponenciální ex.
exp2, , exp2fexp2l Vypočítá exponenciální hodnotu 2x.
expm1, , expm1fexpm1l Vypočítá ex-1.
fabs, , fabsffabsl Vypočítá absolutní hodnotu typu s plovoucí desetinou čárkou.
_fcvt, fcvt Převede číslo s plovoucí desetinnou čárkou na řetězec.
_fcvt_s Zabezpečená verze _fcvt
fdim, , fdimffdiml Určuje kladný rozdíl mezi dvěma hodnotami.
feclearexcept Vymaže zadané výjimky s plovoucí desetinou čárkou.
fegetenv Uloží aktuální prostředí s plovoucí desetinou čárkou.
fegetexceptflag Získá zadaný stav výjimky s plovoucí desetinou čárkou.
fegetround Získá režim zaokrouhlování s plovoucí desetinou čárkou.
feholdexcept Nastaví režim výjimky s plovoucí desetinou čárkou bez zastavení.
feraiseexcept Vyvolá zadané výjimky s plovoucí desetinou čárkou.
fesetenv Nastaví aktuální prostředí s plovoucí desetinou čárkou.
fesetexceptflag Nastaví zadané příznaky stavu s plovoucí desetinou čárkou.
fesetround Nastaví zadaný režim zaokrouhlování s plovoucí desetinou čárkou.
fetestexcept Určuje, které příznaky stavu výjimky s plovoucí desetinou čárkou jsou nastaveny.
feupdateenv Obnoví prostředí s plovoucí desetinou čárkou a potom vyvolá předchozí výjimky.
floor, , floorffloorl Vypočítá podlahu.
fma, , fmaffmal Vypočítá sloučený doplněk násobení.
fmax, , fmaxffmaxl Vypočítá maximální počet argumentů.
fmin, , fminffminl Vypočítá minimum argumentů.
fmod, , fmodffmodl Vypočítá zbytek s plovoucí desetinou čárkou.
_fpclass, _fpclassf Vrátí klasifikaci hodnoty s plovoucí desetinou čárkou.
fpclassify Vrátí klasifikaci hodnoty s plovoucí desetinou čárkou.
_fpieee_flt Nastaví obslužnou rutinu pro výjimky s plovoucí desetinou čárkou.
_fpreset Obnoví prostředí s plovoucí desetinou čárkou.
frexp, , frexpffrexpl Získá mantisu a exponent čísla s plovoucí desetinnou čárkou.
_gcvt, gcvt Převede číslo s plovoucí desetinnou čárkou na řetězec.
_gcvt_s Zabezpečená verze _gcvt
_get_FMA3_enable, _set_FMA3_enable Získá nebo nastaví příznak pro použití FMA3 instrukce na x64
hypot, hypotf, hypotl, _hypot, , _hypotf_hypotl Vypočítá hypotenuse.
ilogb, , ilogbfilogbl Vypočítá celočíselnou hodnotu exponentu base-2.
imaxabs Vypočítá absolutní hodnotu celočíselného typu.
imaxdiv Vypočítá podíl a zbytek dvou celočíselné hodnoty.
isfinite, , _finite_finitef Určuje, zda je hodnota konečná.
isgreater, isgreaterequal, isless, islessequal, , islessgreaterisunordered Porovnání pořadí dvou hodnot s plovoucí desetinnou čárkou
isinf Určuje, zda je hodnota s plovoucí desetinou čárkou nekonečná.
isnan, , _isnan_isnanf Testuje hodnotu s plovoucí desetinnou čárkou pro NaN.
isnormal Testuje, zda je hodnota s plovoucí desetinou čárkou konečný i ne subnormální.
_j0, , _j1_jn Vypočítá besselovu funkci.
ldexp, , ldexpfldexpl Vypočítá x*2n
lgamma, , lgammaflgammal Vypočítá přirozený logaritmus absolutní hodnoty funkce gama.
llrint, , llrintfllrintl Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long long hodnotu.
llround, , llroundfllroundl Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long long hodnotu.
log, logf, logl, log10, , log10flog10l Vypočítá přirozený logaritmus nebo logaritmus base-10.
log1p, , log1pflog1pl Vypočítá přirozený logaritmus 1+x.
log2, , log2flog2l Vypočítá logaritmus base-2.
logb, logbf, logbl, , _logb_logbf Vrátí exponent hodnoty s plovoucí desetinnou čárkou.
lrint, , lrintflrintl Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long hodnotu.
_lrotl, _lrotr Otočí celočíselnou hodnotu doleva nebo doprava.
lround, , lroundflroundl Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long hodnotu.
_matherr Výchozí obslužná rutina matematické chyby
__max Makro, které vrací větší ze dvou hodnot
__min Makro, které vrací menší ze dvou hodnot
modf, , modffmodfl Rozdělí hodnotu s plovoucí desetinnou čárkou na zlomkové a celočíselné části.
nan, , nanfnanl Vrátí tichou hodnotu NaN.
nearbyint, , nearbyintfnearbyintl Vrátí zaokrouhlenou hodnotu.
nextafter, nextafterf, nextafterl, , _nextafter_nextafterf Vrátí další reprezentovatelnou hodnotu s plovoucí desetinnou čárkou.
nexttoward, , nexttowardfnexttowardl Vrátí další reprezentovatelnou hodnotu s plovoucí desetinnou čárkou.
pow, , powfpowl Vrátí hodnotu xy
remainder, , remainderfremainderl Vypočítá zbytek podílu dvou hodnot s plovoucí desetinou čárkou.
remquo, , remquofremquol Vypočítá zbytek dvou celočíselné hodnoty.
rint, , rintfrintl Zaokrouhlí hodnotu s plovoucí desetinou čárkou.
_rotl, _rotl64, , _rotr_rotr64 Obměna bitů v celočíselném typu
round, , roundfroundl Zaokrouhlí hodnotu s plovoucí desetinou čárkou.
_scalb, _scalbf Škáluje argument o mocninu 2.
scalbn, scalbnf, scalbnl, scalbln, , scalblnfscalblnl Vynásobí číslo s plovoucí desetinnou čárkou integrální mocninou FLT_RADIX
_set_controlfp Nastaví řídicí slovo s plovoucí desetinou čárkou.
_set_SSE2_enable Povolí nebo zakáže pokyny SSE2.
signbit Testuje bit znaménka hodnoty s plovoucí desetinou čárkou.
sin, , sinfsinl Vypočítá sinus.
sinh, , sinhfsinhl Vypočítá hyperbolický sinus.
sqrt, , sqrtfsqrtl Vypočítá druhou odmocninu.
_status87, , _statusfp_statusfp2 Získá stavové slovo s plovoucí desetinou čárkou.
strtof, _strtof_l Převede řetězec na float
strtold, _strtold_l Převede řetězec na long double
tan, , tanftanl Vypočítá tangens.
tanh, , tanhftanhl Vypočítá hyperbolický tangens.
tgamma, , tgammaftgammal Vypočítá funkci gama.
trunc, , truncftruncl Zkrátí zlomkovou část.
_wtof, _wtof_l Převede široký řetězec na double
_y0, , _y1_yn Vypočítá besselovu funkci.

Viz také

Rutiny UCRT (Universal C runtime) podle kategorie
Primitiva s plovoucí desetinnou čárkou