Obsługa obliczeń matematycznych i zmiennoprzecinkowych
Biblioteka uniwersalnego środowiska uruchomieniowego języka C (UCRT) udostępnia wiele funkcji bibliotek matematycznych całkowitych i zmiennoprzecinkowych, w tym wszystkie funkcje wymagane przez iso C99. Funkcje zmiennoprzecinkowe są implementowane w celu zrównoważenia wydajności z poprawnością. Ponieważ generowanie poprawnie zaokrąglonego wyniku może być zbyt kosztowne, te funkcje są zaprojektowane tak, aby wydajnie uzyskać bliskie przybliżenie prawidłowego zaokrąglonego wyniku. W większości przypadków wygenerowany wynik znajduje się w ciągu +/-1 ULP (jednostka najmniejszej precyzji) poprawnie zaokrąglonego wyniku, choć mogą wystąpić przypadki, w których występuje większa niedokładność.
W przypadku standardu ISO C Standard 11 (C11) i nowszych nagłówek oprócz elementów <math.h>
i <complex.h>
udostępnia makra, <tgmath.h>
które wywołują odpowiednią funkcję matematyczną na podstawie typów parametrów. Aby uzyskać szczegółowe informacje, zobacz Typy ogólne matematyczne .
Wiele funkcji biblioteki matematycznej zmiennoprzecinkowych ma różne implementacje dla różnych architektur procesora CPU. Na przykład 32-bitowy X86 CRT może mieć inną implementację niż 64-bitowa X64 CRT. Ponadto niektóre funkcje mogą mieć wiele implementacji dla danej architektury procesora CPU. Najbardziej wydajna implementacja jest wybierana dynamicznie w czasie wykonywania w zależności od zestawów instrukcji obsługiwanych przez procesor. Na przykład w 32-bitowej architekturze X86 CRT niektóre funkcje mają implementację x87 i implementację SSE2. W przypadku uruchamiania na procesorze, który obsługuje SSE2, używana jest szybsza implementacja SSE2. W przypadku uruchamiania na procesorze CPU, który nie obsługuje protokołu SSE2, używana jest wolniejsza implementacja x87. Ponieważ różne implementacje funkcji biblioteki matematycznej mogą używać różnych instrukcji procesora CPU i różnych algorytmów do generowania wyników, funkcje mogą generować różne wyniki w różnych procesorach CPU. W większości przypadków wyniki znajdują się w ciągu +/-1 ULP poprawnie zaokrąglonego wyniku, ale rzeczywiste wyniki mogą się różnić w zależności od procesorów CPU.
Poprzednie 16-bitowe wersje programów Microsoft C/C++ i Microsoft Visual C++ obsługiwały long double
typ jako 80-bitowy typ danych zmiennoprzecinkowych o precyzji 80-bitowej. W nowszych wersjach programu Visual C++typ long double
danych jest 64-bitowym typem danych zmiennoprzecinkowych o precyzji identycznej z typem double
. Kompilator traktuje long double
i double
jako odrębne typy, ale long double
funkcje są identyczne z ich double
odpowiednikami. CRT udostępnia long double
wersje funkcji matematycznych dla zgodności kodu źródłowego ISO C99, ale należy pamiętać, że reprezentacja binarna może się różnić od innych kompilatorów.
Obsługiwane procedury matematyczne i zmiennoprzecinkowe
Procedura | Używanie |
---|---|
abs , labs , llabs , _abs64 |
Oblicza wartość bezwzględną typu liczby całkowitej |
acos , acosf , acosl |
Oblicza cosinus łuku |
acosh , acoshf , acoshl |
Oblicza cosinus hiperboliczny łuk |
asin , asinf , asinl |
Oblicza sinus łuku |
asinh , asinhf , asinhl |
Oblicza sinus hiperboliczny łuk |
atan , atanf , atanl , atan2 , atan2f , atan2l |
Oblicza tangens łuku |
atanh , atanhf , atanhl |
Oblicza tangens łuku hiperbolicznego |
_atodbl , _atodbl_l |
Konwertuje ciąg specyficzny dla ustawień regionalnych na double |
atof , _atof_l |
Konwertuje ciąg na double |
_atoflt , _atoflt_l , _atoldbl , _atoldbl_l |
Konwertuje ciąg specyficzny dla ustawień regionalnych na wartość float lub long double |
cbrt , cbrtf , cbrtl |
Oblicza katalog główny modułu |
ceil , ceilf , ceill |
Oblicza limit |
_chgsign , _chgsignf , _chgsignl |
Oblicza odwrotność dodawania |
_clear87 , _clearfp |
Pobiera i czyści rejestr stanu zmiennoprzecinkowego |
_control87 , _controlfp , __control87_2 |
Pobiera i ustawia słowo sterujące zmiennoprzecinkowe |
_controlfp_s |
Bezpieczna wersja programu _controlfp |
copysign , copysignf , copysignl , _copysign , _copysignf , _copysignl |
Zwraca wartość o wielkości jednego argumentu i znak innego |
cos , cosf , cosl |
Oblicza sinus |
cosh , coshf , coshl |
Oblicza sinus hiperboliczny |
div , ldiv , lldiv |
Oblicza iloraz i pozostałą część dwóch wartości całkowitych |
_ecvt , ecvt |
Konwertuje element double na ciąg |
_ecvt_s |
Bezpieczna wersja programu _ecvt |
erf , erff , erfl |
Oblicza funkcję błędu |
erfc , erfcf , erfcl |
Oblicza uzupełniającą funkcję błędu |
exp , expf , expl |
Oblicza wykładniczo ex |
exp2 , exp2f , exp2l |
Oblicza wykładniczą wartość 2x |
expm1 , expm1f , expm1l |
Obliczenia ex-1 |
fabs , fabsf , fabsl |
Oblicza wartość bezwzględną typu zmiennoprzecinkowego |
_fcvt , fcvt |
Konwertuje liczbę zmiennoprzecinkową na ciąg |
_fcvt_s |
Bezpieczna wersja programu _fcvt |
fdim , fdimf , fdiml |
Określa dodatnią różnicę między dwiema wartościami |
feclearexcept |
Czyści określone wyjątki zmiennoprzecinkowe |
fegetenv |
Przechowuje bieżące środowisko zmiennoprzecinkowe |
fegetexceptflag |
Pobiera określony stan wyjątku zmiennoprzecinkowego |
fegetround |
Pobiera tryb zaokrąglania zmiennoprzecinkowego |
feholdexcept |
Ustawia tryb wyjątku zmiennoprzecinkowego bez zatrzymywania |
feraiseexcept |
Zgłasza określone wyjątki zmiennoprzecinkowe |
fesetenv |
Ustawia bieżące środowisko zmiennoprzecinkowe |
fesetexceptflag |
Ustawia określone flagi stanu zmiennoprzecinkowe |
fesetround |
Ustawia określony tryb zaokrąglania zmiennoprzecinkowego |
fetestexcept |
Określa, które flagi stanu wyjątków zmiennoprzecinkowych są ustawione |
feupdateenv |
Przywraca środowisko zmiennoprzecinkowe, a następnie zgłasza poprzednie wyjątki |
floor , floorf , floorl |
Oblicza podłogę |
fma , fmaf , fmal |
Oblicza bezpieczną sumę mnożenia |
fmax , fmaxf , fmaxl |
Oblicza maksymalną liczbę argumentów |
fmin , fminf , fminl |
Oblicza minimum argumentów |
fmod , fmodf , fmodl |
Oblicza pozostałą część zmiennoprzecinkową |
_fpclass , _fpclassf |
Zwraca klasyfikację wartości zmiennoprzecinkowej |
fpclassify |
Zwraca klasyfikację wartości zmiennoprzecinkowej |
_fpieee_flt |
Ustawia procedurę obsługi dla wyjątków zmiennoprzecinkowych |
_fpreset |
Resetuje środowisko zmiennoprzecinkowe |
frexp , frexpf , frexpl |
Pobiera mantissa i wykładnik liczby zmiennoprzecinkowych |
_gcvt , gcvt |
Konwertuje liczbę zmiennoprzecinkową na ciąg |
_gcvt_s |
Bezpieczna wersja programu _gcvt |
_get_FMA3_enable , _set_FMA3_enable |
Pobiera lub ustawia flagę do użycia instrukcji FMA3 na x64 |
hypot , hypotf , hypotl , _hypot , _hypotf , _hypotl |
Oblicza podcięcie |
ilogb , ilogbf , ilogbl |
Oblicza wykładnik liczby całkowitej base-2 |
imaxabs |
Oblicza wartość bezwzględną typu liczby całkowitej |
imaxdiv |
Oblicza iloraz i pozostałą część dwóch wartości całkowitych |
isfinite , _finite , _finitef |
Określa, czy wartość jest skończona |
isgreater , isgreaterequal , isless , islessequal , islessgreater , isunordered |
Porównanie kolejności dwóch wartości zmiennoprzecinkowych |
isinf |
Określa, czy wartość zmiennoprzecinkowa jest nieskończona |
isnan , _isnan , _isnanf |
Testuje wartość zmiennoprzecinkowa dla sieci NaN |
isnormal |
Sprawdza, czy wartość zmiennoprzecinkowa jest skończona, a nie podnormalna |
_j0 , _j1 , _jn |
Oblicza funkcję Bessel |
ldexp , ldexpf , ldexpl |
Obliczenia x*2n |
lgamma , lgammaf , lgammal |
Oblicza logarytm naturalny wartości bezwzględnej funkcji gamma |
llrint , llrintf , llrintl |
Zaokrągla wartość zmiennoprzecinkową do najbliższej long long wartości |
llround , llroundf , llroundl |
Zaokrągla wartość zmiennoprzecinkową do najbliższej long long wartości |
log , logf , logl , log10 , log10f , log10l |
Oblicza logarytm naturalny lub base-10 |
log1p , log1pf , log1pl |
Oblicza logarytm naturalny 1+x |
log2 , log2f , log2l |
Oblicza logarytm base-2 |
logb , logbf , logbl , _logb , _logbf |
Zwraca wykładnik wartości zmiennoprzecinkowej |
lrint , lrintf , lrintl |
Zaokrągla wartość zmiennoprzecinkową do najbliższej long wartości |
_lrotl , _lrotr |
Obraca wartość całkowitą w lewo lub w prawo |
lround , lroundf , lroundl |
Zaokrągla wartość zmiennoprzecinkową do najbliższej long wartości |
_matherr |
Domyślna procedura obsługi błędów matematycznych |
__max |
Makro zwracające większą z dwóch wartości |
__min |
Makro zwracające mniejsze z dwóch wartości |
modf , modff , modfl |
Dzieli wartość zmiennoprzecinkową na części ułamkowe i całkowite |
nan , nanf , nanl |
Zwraca cichą wartość NaN |
nearbyint , nearbyintf , nearbyintl |
Zwraca zaokrąglona wartość |
nextafter , nextafterf , nextafterl , _nextafter , _nextafterf |
Zwraca następną reprezentującą wartość zmiennoprzecinkową |
nexttoward , nexttowardf , nexttowardl |
Zwraca następną reprezentującą wartość zmiennoprzecinkową |
pow , powf , powl |
Zwraca wartość x y |
remainder , remainderf , remainderl |
Oblicza pozostałą część ilorazu dwóch wartości zmiennoprzecinkowych |
remquo , remquof , remquol |
Oblicza pozostałą część dwóch wartości całkowitych |
rint , rintf , rintl |
Zaokrągla wartość zmiennoprzecinkową |
_rotl , _rotl64 , _rotr , _rotr64 |
Obraca bity w typach liczb całkowitych |
round , roundf , roundl |
Zaokrągla wartość zmiennoprzecinkową |
_scalb , _scalbf |
Skaluje argument o mocy 2 |
scalbn , scalbnf , scalbnl , scalbln , scalblnf , scalblnl |
Mnoży liczbę zmiennoprzecinkową przez całkowitą moc FLT_RADIX |
_set_controlfp |
Ustawia słowo sterujące zmiennoprzecinkowe |
_set_SSE2_enable |
Włącza lub wyłącza instrukcje SSE2 |
signbit |
Testuje bit znaku wartości zmiennoprzecinkowej |
sin , sinf , sinl |
Oblicza sinus |
sinh , sinhf , sinhl |
Oblicza sinus hiperboliczny |
sqrt , sqrtf , sqrtl |
Oblicza pierwiastek kwadratowy |
_status87 , _statusfp , _statusfp2 |
Pobiera słowo o stanie zmiennoprzecinkowe |
strtof , _strtof_l |
Konwertuje ciąg na float |
strtold , _strtold_l |
Konwertuje ciąg na long double |
tan , tanf , tanl |
Oblicza tangens |
tanh , tanhf , tanhl |
Oblicza tangens hiperboliczny |
tgamma , tgammaf , tgammal |
Oblicza funkcję gamma |
trunc , truncf , truncl |
Obcina część ułamkową |
_wtof , _wtof_l |
Konwertuje szeroki ciąg na double |
_y0 , _y1 , _yn |
Oblicza funkcję Bessel |
Zobacz też
Procedury czasu wykonywania języka Universal C według kategorii
Zmiennoprzecinkowe typy pierwotne
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla