수학 및 부동 소수점 지원
UCRT(유니버설 C 런타임 라이브러리)는 ISO C99에 필요한 모든 함수를 포함하여 많은 정수 및 부동 소수점 수학 라이브러리 함수를 제공합니다. 부동 소수점 함수는 성능과 정확성을 균형 있게 유지하도록 구현됩니다. 올바르게 반올림된 결과를 생성하는 것은 막대한 비용이 들 수 있으므로 이러한 함수는 올바르게 반올림된 결과에 대한 근사치를 효율적으로 생성하도록 설계됩니다. 대부분의 경우 생성되는 결과는 올바르게 반올림된 결과의 +/-1 ULP(최소 정밀도 단위) 내에 있지만 부정확성이 더 큰 경우가 있을 수 있습니다.
ISO C Standard 11(C11) 이상의 <tgmath.h>
경우 헤더는 포함 및 <complex.h>
포함 <math.h>
외에도 매개 변수 형식에 따라 해당 수학 함수를 호출하는 매크로를 제공합니다. 자세한 내용은 형식-제네릭 수학을 참조하세요.
대부분의 부동 소수점 수학 라이브러리 함수에는 다양한 CPU 아키텍처에 대한 다양한 구현이 있습니다. 예를 들어 32비트 x86 CRT에는 64비트 x64 CRT와 다른 구현이 있을 수 있습니다. 또한 일부 함수에는 지정된 CPU 아키텍처에 대한 여러 구현이 있을 수 있습니다. 가장 효율적인 구현은 CPU에서 지원되는 명령 집합에 따라 런타임에 동적으로 선택됩니다. 예를 들어 32비트 x86 CRT에서 일부 함수에는 x87 구현 및 an SSE2 구현이 둘 다 있습니다. SSE2를 지원하는 CPU에서 실행될 경우 더 빠른 SSE2 구현이 사용됩니다. SSE2를 지원하지 않는 CPU에서 실행하는 경우 느린 x87 구현이 사용됩니다. 수학 라이브러리 함수의 구현에 따라 다른 CPU 명령 및 다른 알고리즘을 사용하여 결과를 생성할 수 있으므로 CPU에 따라 함수에서 다른 결과가 생성될 수 있습니다. 대부분의 경우 결과는 올바르게 반올림된 결과의 +/-1 ULP 내에 있지만 실제 결과는 CPU에 따라 다를 수 있습니다.
Microsoft C/C++ 및 Microsoft Visual C++의 이전 16비트 버전에서는 long double
형식을 80비트 정밀도 부동 소수점 데이터 형식으로 지원했습니다. Visual C++의 이후 버전에서 long double
데이터 형식은 double
형식과 동일한 64비트 정밀도 부동 소수점 데이터 형식입니다. 컴파일러에서는 long double
및 double
을 서로 다른 형식으로 처리하지만 long double
함수는 해당 함수의 double
상응 함수와 동일합니다. CRT는 ISO C99 소스 코드 호환성을 위해 수학 함수의 long double
버전을 제공하지만, 이진 표현이 다른 컴파일러의 이진 표현과 다를 수 있습니다.
지원되는 수학식 및 부동 소수점 루틴
루틴에서 반환된 값 | 사용할 용어 |
---|---|
abs , labs , llabs _abs64 |
정수 형식의 절대값을 계산합니다. |
acos , , acosf acosl |
아크코사인을 계산합니다. |
acosh , , acoshf acoshl |
쌍곡선 아크코사인을 계산합니다. |
asin , , asinf asinl |
아크사인을 계산합니다. |
asinh , , asinhf asinhl |
쌍곡선 아크사인을 계산합니다. |
atan , atanf , atanl , atan2 , atan2f atan2l |
아크탄젠트를 계산합니다. |
atanh , , atanhf atanhl |
쌍곡선 아크탄젠트를 계산합니다. |
_atodbl , _atodbl_l |
로캘별 문자열을 로 변환합니다. double |
atof , _atof_l |
문자열을 로 변환합니다. double |
_atoflt , _atoflt_l , _atoldbl _atoldbl_l |
로캘별 문자열을 로 변환합니다.float long double |
cbrt , , cbrtf cbrtl |
세제곱근을 계산합니다. |
ceil , , ceilf ceill |
최곳값을 계산합니다. |
_chgsign , , _chgsignf _chgsignl |
덧셈 역원을 계산합니다. |
_clear87 , _clearfp |
부동 소수점 상태 레지스터를 가져오고 지웁니다. |
_control87 , , _controlfp __control87_2 |
부동 소수점 제어 단어를 가져오고 설정합니다. |
_controlfp_s |
보안 버전의 _controlfp |
copysign , copysignf , copysignl , _copysign , _copysignf _copysignl |
한 인수의 크기 및 다른 인수의 부호가 있는 값을 반환합니다. |
cos , , cosf cosl |
사인을 계산합니다. |
cosh , , coshf coshl |
쌍곡선 사인을 계산합니다. |
div , , ldiv lldiv |
두 정수 값의 몫과 나머지를 계산합니다. |
_ecvt , ecvt |
문자열로 double 변환 |
_ecvt_s |
보안 버전의 _ecvt |
erf , , erff erfl |
오차 함수를 계산합니다. |
erfc , , erfcf erfcl |
보상 오차 함수를 계산합니다. |
exp , , expf expl |
지수 ex를 계산합니다. |
exp2 , , exp2f exp2l |
지수 2x를 계산합니다. |
expm1 , , expm1f expm1l |
ex-1를 계산합니다. |
fabs , , fabsf fabsl |
부동 소수점 형식의 절대값을 계산합니다. |
_fcvt , fcvt |
부동 소수점 숫자를 문자열로 변환합니다. |
_fcvt_s |
보안 버전의 _fcvt |
fdim , , fdimf fdiml |
두 값의 양수 차이를 결정합니다. |
feclearexcept |
지정된 부동 소수점 예외를 지웁니다. |
fegetenv |
현재 부동 소수점 환경을 저장합니다. |
fegetexceptflag |
지정된 부동 소수점 예외 상태를 가져옵니다. |
fegetround |
부동 소수점 반올림 모드를 가져옵니다. |
feholdexcept |
중단 없는 부동 소수점 예외 모드를 설정합니다. |
feraiseexcept |
지정된 부동 소수점 예외를 발생시킵니다. |
fesetenv |
현재 부동 소수점 환경을 설정합니다. |
fesetexceptflag |
지정된 부동 소수점 상태 플래그를 설정합니다. |
fesetround |
지정된 부동 소수점 반올림 모드를 설정합니다. |
fetestexcept |
설정된 부동 소수점 예외 상태 플래그를 결정합니다. |
feupdateenv |
부동 소수점 환경을 복원한 다음, 이전 예외를 발생시킵니다. |
floor , , floorf floorl |
최젓값을 계산합니다. |
fma , , fmaf fmal |
단일 곱셈 누산기(Fused Multiply-Add)를 계산합니다. |
fmax , , fmaxf fmaxl |
인수의 최댓값을 계산합니다. |
fmin , , fminf fminl |
인수의 최소값을 계산합니다. |
fmod , , fmodf fmodl |
부동 소수점 나머지를 계산합니다. |
_fpclass , _fpclassf |
부동 소수점 값의 분류를 반환합니다. |
fpclassify |
부동 소수점 값의 분류를 반환합니다. |
_fpieee_flt |
부동 소수점 예외에 대한 처리기를 설정합니다. |
_fpreset |
부동 소수점 환경을 다시 설정합니다. |
frexp , , frexpf frexpl |
부동 소수점 숫자의 가수와 지수를 가져옵니다. |
_gcvt , gcvt |
부동 소수점 숫자를 문자열로 변환합니다. |
_gcvt_s |
보안 버전의 _gcvt |
_get_FMA3_enable , _set_FMA3_enable |
x64에서 FMA3 명령을 사용하기 위한 플래그를 가져오거나 설정합니다. |
hypot , hypotf , hypotl , _hypot , _hypotf _hypotl |
빗변을 계산합니다. |
ilogb , , ilogbf ilogbl |
밑이 2인 정수 지수를 계산합니다. |
imaxabs |
정수 형식의 절대값을 계산합니다. |
imaxdiv |
두 정수 값의 몫과 나머지를 계산합니다. |
isfinite , , _finite _finitef |
유한 값인지 여부를 결정합니다. |
isgreater , isgreaterequal , isless , islessequal , islessgreater isunordered |
두 부동 소수점 값의 순서 비교 |
isinf |
부동 소수점 값이 무한인지 확인 |
isnan , , _isnan _isnanf |
NaN에 대한 부동 소수점 값을 테스트합니다. |
isnormal |
부동 소수점 값이 유한하고 비정상적인지 여부를 테스트합니다. |
_j0 , , _j1 _jn |
Bessel 함수를 계산합니다. |
ldexp , , ldexpf ldexpl |
x*2n을 계산합니다. |
lgamma , , lgammaf lgammal |
감마 함수의 절대값에 대한 자연 로그를 계산합니다. |
llrint , , llrintf llrintl |
부동 소수점 값을 가장 long long 가까운 값으로 반올림합니다. |
llround , , llroundf llroundl |
부동 소수점 값을 가장 long long 가까운 값으로 반올림합니다. |
log , logf , logl , log10 , log10f log10l |
자연 로그 또는 상용 로그를 계산합니다. |
log1p , , log1pf log1pl |
1 + x의 자연 로그를 계산합니다. |
log2 , , log2f log2l |
밑이 2인 로그를 계산합니다. |
logb , logbf , logbl , _logb _logbf |
부동 소수점 값의 지수를 반환합니다. |
lrint , , lrintf lrintl |
부동 소수점 값을 가장 long 가까운 값으로 반올림합니다. |
_lrotl , _lrotr |
정수 값을 왼쪽 또는 오른쪽으로 회전합니다. |
lround , , lroundf lroundl |
부동 소수점 값을 가장 long 가까운 값으로 반올림합니다. |
_matherr |
기본 수학 오류 처리기입니다. |
__max |
두 값 중 큰 값을 반환하는 매크로입니다. |
__min |
두 값 중 작은 값을 반환하는 매크로입니다. |
modf , , modff modfl |
부동 소수점 값을 소수 부분과 정수 부분으로 분할합니다. |
nan , , nanf nanl |
QNaN(Quiet NaN) 값을 반환합니다. |
nearbyint , , nearbyintf nearbyintl |
반올림된 값을 반환합니다. |
nextafter , nextafterf , nextafterl , _nextafter _nextafterf |
표현 가능한 다음 부동 소수점 값을 반환합니다. |
nexttoward , , nexttowardf nexttowardl |
표현 가능한 다음 부동 소수점 값을 반환합니다. |
pow , , powf powl |
의 값을 반환합니다. x y |
remainder , , remainderf remainderl |
두 부동 소수점 값의 몫과 나머지를 계산합니다. |
remquo , , remquof remquol |
두 정수 값의 나머지를 계산합니다. |
rint , , rintf rintl |
부동 소수점 값을 반올림합니다. |
_rotl , _rotl64 , _rotr _rotr64 |
비트를 정수 형식으로 회전합니다. |
round , , roundf roundl |
부동 소수점 값을 반올림합니다. |
_scalb , _scalbf |
인수의 크기를 2의 거듭제곱으로 조정합니다. |
scalbn , scalbnf , scalbnl , scalbln , scalblnf scalblnl |
부동 소수점 숫자와 정수 계열을 곱합니다. FLT_RADIX |
_set_controlfp |
부동 소수점 제어 단어를 설정합니다. |
_set_SSE2_enable |
SSE2 명령을 사용하거나 사용하지 않도록 설정합니다. |
signbit |
부동 소수점 값의 부호 비트를 테스트합니다. |
sin , , sinf sinl |
사인을 계산합니다. |
sinh , , sinhf sinhl |
쌍곡선 사인을 계산합니다. |
sqrt , , sqrtf sqrtl |
제곱근을 계산합니다. |
_status87 , , _statusfp _statusfp2 |
부동 소수점 상태 단어를 가져옵니다. |
strtof , _strtof_l |
문자열을 로 변환합니다. float |
strtold , _strtold_l |
문자열을 로 변환합니다. long double |
tan , , tanf tanl |
탄젠트를 계산합니다. |
tanh , , tanhf tanhl |
쌍곡선 탄젠트를 계산합니다. |
tgamma , , tgammaf tgammal |
감마 함수를 계산합니다. |
trunc , , truncf truncl |
소수 부분을 자릅니다. |
_wtof , _wtof_l |
와이드 문자열을 로 변환합니다. double |
_y0 , , _y1 _yn |
Bessel 함수를 계산합니다. |