수학식 및 부동 소수점 지원

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 doubledouble을 서로 다른 형식으로 처리하지만 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 로캘별 문자열을 로 변환합니다.floatlong 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 의 값을 반환합니다. xy
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 함수를 계산합니다.

참고 항목

범주별 유버니설 C 런타임 루틴
부동 소수점 기본 형식