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 , , acosf acosl |
Vypočítá kosinus oblouku. |
acosh , , acoshf acoshl |
Vypočítá hyperbolický kosinus arkus. |
asin , , asinf asinl |
Vypočítá arkus sinus. |
asinh , , asinhf asinhl |
Vypočítá hyperbolický arkusový sinus. |
atan , atanf , atanl , atan2 , , atan2f atan2l |
Vypočítá arkus tangens. |
atanh , , atanhf atanhl |
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 float long double |
cbrt , , cbrtf cbrtl |
Vypočítá kořen datové krychle. |
ceil , , ceilf ceill |
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 , , cosf cosl |
Vypočítá sinus. |
cosh , , coshf coshl |
Vypočítá hyperbolický sinus. |
div , , ldiv lldiv |
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 , , erff erfl |
Vypočítá chybovou funkci. |
erfc , , erfcf erfcl |
Vypočítá doplňkovou chybovou funkci. |
exp , , expf expl |
Vypočítá exponenciální ex. |
exp2 , , exp2f exp2l |
Vypočítá exponenciální hodnotu 2x. |
expm1 , , expm1f expm1l |
Vypočítá ex-1. |
fabs , , fabsf fabsl |
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 , , fdimf fdiml |
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 , , floorf floorl |
Vypočítá podlahu. |
fma , , fmaf fmal |
Vypočítá sloučený doplněk násobení. |
fmax , , fmaxf fmaxl |
Vypočítá maximální počet argumentů. |
fmin , , fminf fminl |
Vypočítá minimum argumentů. |
fmod , , fmodf fmodl |
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 , , frexpf frexpl |
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 , , ilogbf ilogbl |
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 , , islessgreater isunordered |
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 , , ldexpf ldexpl |
Vypočítá x*2n |
lgamma , , lgammaf lgammal |
Vypočítá přirozený logaritmus absolutní hodnoty funkce gama. |
llrint , , llrintf llrintl |
Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long long hodnotu. |
llround , , llroundf llroundl |
Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long long hodnotu. |
log , logf , logl , log10 , , log10f log10l |
Vypočítá přirozený logaritmus nebo logaritmus base-10. |
log1p , , log1pf log1pl |
Vypočítá přirozený logaritmus 1+x. |
log2 , , log2f log2l |
Vypočítá logaritmus base-2. |
logb , logbf , logbl , , _logb _logbf |
Vrátí exponent hodnoty s plovoucí desetinnou čárkou. |
lrint , , lrintf lrintl |
Zaokrouhlí hodnotu s plovoucí desetinou čárkou na nejbližší long hodnotu. |
_lrotl , _lrotr |
Otočí celočíselnou hodnotu doleva nebo doprava. |
lround , , lroundf lroundl |
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 , , modff modfl |
Rozdělí hodnotu s plovoucí desetinnou čárkou na zlomkové a celočíselné části. |
nan , , nanf nanl |
Vrátí tichou hodnotu NaN. |
nearbyint , , nearbyintf nearbyintl |
Vrátí zaokrouhlenou hodnotu. |
nextafter , nextafterf , nextafterl , , _nextafter _nextafterf |
Vrátí další reprezentovatelnou hodnotu s plovoucí desetinnou čárkou. |
nexttoward , , nexttowardf nexttowardl |
Vrátí další reprezentovatelnou hodnotu s plovoucí desetinnou čárkou. |
pow , , powf powl |
Vrátí hodnotu x y |
remainder , , remainderf remainderl |
Vypočítá zbytek podílu dvou hodnot s plovoucí desetinou čárkou. |
remquo , , remquof remquol |
Vypočítá zbytek dvou celočíselné hodnoty. |
rint , , rintf rintl |
Zaokrouhlí hodnotu s plovoucí desetinou čárkou. |
_rotl , _rotl64 , , _rotr _rotr64 |
Obměna bitů v celočíselném typu |
round , , roundf roundl |
Zaokrouhlí hodnotu s plovoucí desetinou čárkou. |
_scalb , _scalbf |
Škáluje argument o mocninu 2. |
scalbn , scalbnf , scalbnl , scalbln , , scalblnf scalblnl |
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 , , sinf sinl |
Vypočítá sinus. |
sinh , , sinhf sinhl |
Vypočítá hyperbolický sinus. |
sqrt , , sqrtf sqrtl |
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 , , tanf tanl |
Vypočítá tangens. |
tanh , , tanhf tanhl |
Vypočítá hyperbolický tangens. |
tgamma , , tgammaf tgammal |
Vypočítá funkci gama. |
trunc , , truncf truncl |
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