부동 소수점 지원Floating-Point Support

Microsoft CRT(C 런타임 라이브러리)는 ISO C99에 따라 필요한 모든 함수를 포함하여 다양한 부동 소수점 수학 라이브러리 함수를 제공합니다.The Microsoft C Runtime library (CRT) provides many floating point math library functions, including all of those required by ISO C99. 이러한 함수는 수정을 통해 성능을 균형있게 분배하도록 구현됩니다.These functions are implemented to balance performance with correctness. 올바르게 반올림된 결과를 생성하는 것은 막대한 비용이 들 수 있으므로 이러한 함수는 올바르게 반올림된 결과에 대한 근사치를 효율적으로 생성하도록 설계됩니다.Because producing the correctly rounded result may be prohibitively expensive, these functions are designed to efficiently produce a close approximation to the correctly rounded result. 부정확성이 더 큰 경우도 있을 수 있지만 대부분은 생성된 결과가 올바르게 반올림된 결과의 +/-1 ulp 내에 있습니다.In most cases, the result produced is within +/-1 ulp of the correctly rounded result, though there may be cases where there is greater inaccuracy.

대부분의 부동 소수점 수학 라이브러리 함수에는 다양한 CPU 아키텍처에 대한 다양한 구현이 있습니다.Many of the floating point math library functions have different implementations for different CPU architectures. 예를 들어 32비트 x86 CRT에는 64비트 x64 CRT와 다른 구현이 있을 수 있습니다.For example, the 32-bit x86 CRT may have a different implementation than the 64-bit x64 CRT. 또한 일부 함수에는 지정된 CPU 아키텍처에 대한 여러 구현이 있을 수 있습니다.In addition, some of the functions may have multiple implementations for a given CPU architecture. 가장 효율적인 구현은 CPU에서 지원되는 명령 집합에 따라 런타임에 동적으로 선택됩니다.The most efficient implementation is selected dynamically at run-time depending on the instruction sets supported by the CPU. 예를 들어 32비트 x86 CRT에서 일부 함수에는 x87 구현 및 an SSE2 구현이 둘 다 있습니다.For example, in the 32-bit x86 CRT, some functions have both an x87 implementation and an SSE2 implementation. SSE2를 지원하는 CPU에서 실행될 경우 더 빠른 SSE2 구현이 사용됩니다.When running on a CPU that supports SSE2, the faster SSE2 implementation is used. SSE2를 지원하지 않는 CPU에서 실행될 경우 더 느린 x87 구현이 사용됩니다.When running on a CPU that does not support SSE2, the slower x87 implementation is used. 수학 라이브러리 함수의 구현에 따라 다른 CPU 명령 및 다른 알고리즘을 사용하여 결과를 생성할 수 있으므로 CPU에 따라 함수에서 다른 결과가 생성될 수 있습니다.Because different implementations of the math library functions may use different CPU instructions and different algorithms to produce their results, the functions may produce different results across CPUs. 대부분은 결과가 올바르게 반올림된 결과의 +/-1 ulp 내에 있지만 실제 결과는 CPU에 따라 달라질 수 있습니다.In most cases, the results are within +/-1 ulp of the correctly rounded result, but the actual results may vary across CPUs.

Microsoft C/C++ 및 Microsoft Visual C++의 이전 16비트 버전에서는 long double 형식을 80비트 정밀도 부동 소수점 데이터 형식으로 지원했습니다.Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported the long double type as an 80-bit precision floating-point data type. Visual C++의 이후 버전에서 long double 데이터 형식은 double 형식과 동일한 64비트 정밀도 부동 소수점 데이터 형식입니다.In later versions of Visual C++, the long double data type is a 64-bit precision floating-point data type identical to the double type. 컴파일러에서는 long doubledouble을 서로 다른 형식으로 처리하지만 long double 함수는 해당 함수의 double 상응 함수와 동일합니다.The compiler treats long double and double as distinct types, but the long double functions are identical to their double counterparts. CRT는 ISO C99 소스 코드 호환성을 위해 수학 함수의 long double 버전을 제공하지만, 이진 표현이 다른 컴파일러의 이진 표현과 다를 수 있습니다.The CRT provides long double versions of the math functions for ISO C99 source code compatibility, but note that the binary representation may differ from other compilers.

CRT는 다음과 같은 부동 소수점 함수를 지원합니다.The CRT supports these floating point functions:

abs, labs, llabs, _abs64abs, labs, llabs, _abs64

acos, acosf, acoslacos, acosf, acosl

acosh, acoshf, acoshlacosh, acoshf, acoshl

asin, asinf, asinlasin, asinf, asinl

asinh, asinhf, asinhlasinh, asinhf, asinhl

atan, atanf, atanl, atan2, atan2f, atan2latan, atanf, atanl, atan2, atan2f, atan2l

atanh, atanhf, atanhlatanh, atanhf, atanhl

_atodbl, _atodbl_l_atodbl, _atodbl_l

atof, _atof_latof, _atof_l

_atoflt, _atoflt_l, _atoldbl, _atoldbl_l_atoflt, _atoflt_l, _atoldbl, _atoldbl_l

cbrt, cbrtf, cbrtlcbrt, cbrtf, cbrtl

ceil, ceilf, ceillceil, ceilf, ceill

_chgsign, _chgsignf, _chgsignl_chgsign, _chgsignf, _chgsignl

_clear87, _clearfp_clear87, _clearfp

complcompl

conj, conjf, conjlconj, conjf, conjl

_control87, __control87_2, _controlfp_control87, __control87_2, _controlfp

_controlfp_s_controlfp_s

copysign, copysignf, copysignl, _copysign, _copysignf, _copysignlcopysign, copysignf, copysignl, _copysign, _copysignf, _copysignl

cos, cosf, coslcos, cosf, cosl

cosh, coshf, coshlcosh, coshf, coshl

divdiv

_ecvt_ecvt

ecvtecvt

_ecvt_s_ecvt_s

erf, erff, erfl, erfc, erfcf, erfclerf, erff, erfl, erfc, erfcf, erfcl

exp, expf, explexp, expf, expl

exp2, exp2f, exp2lexp2, exp2f, exp2l

expm1, expm1f, expm1lexpm1, expm1f, expm1l

fabs, fabsffabs, fabsf

_fcvt_fcvt

fcvtfcvt

_fcvt_s_fcvt_s

fdim, fdimf, fdimlfdim, fdimf, fdiml

feclearexceptfeclearexcept

fegetenvfegetenv

fegetexceptflagfegetexceptflag

fegetroundfegetround

feholdexceptfeholdexcept

feraiseexceptferaiseexcept

ferrorferror

fesetenvfesetenv

fesetexceptflagfesetexceptflag

fesetroundfesetround

fetestexceptfetestexcept

feupdateenvfeupdateenv

_finite, _finitef_finite, _finitef

floor, floorf, floorlfloor, floorf, floorl

fma, fmaf, fmalfma, fmaf, fmal

fmax, fmaxf, fmaxlfmax, fmaxf, fmaxl

fmin, fminf, fminlfmin, fminf, fminl

fmod, fmodffmod, fmodf

_fpclass, _fpclassf_fpclass, _fpclassf

fpclassifyfpclassify

_fpieee_flt_fpieee_flt

_fpreset_fpreset

frexpfrexp

gcvtgcvt

_gcvt_gcvt

_gcvt_s_gcvt_s

_get_FMA3_enable, _set_FMA3_enable_get_FMA3_enable, _set_FMA3_enable

hypot, hypotf, hypotl, _hypot, _hypotf, _hypotlhypot, hypotf, hypotl, _hypot, _hypotf, _hypotl

ilogb, ilogbf, ilogblilogb, ilogbf, ilogbl

imaxabsimaxabs

imaxdivimaxdiv

isnan, _isnan, _isnanfisnan, _isnan, _isnanf

_j0, _j1, _jn_j0, _j1, _jn

ldexpldexp

ldiv, lldivldiv, lldiv

lgamma, lgammaf, lgammallgamma, lgammaf, lgammal

llrint, llrintf, llrintlllrint, llrintf, llrintl

llround, llroundf, llroundlllround, llroundf, llroundl

log, logf, log10, log10flog, logf, log10, log10f

log1p, log1pf, log1pllog1p, log1pf, log1pl

log2, log2f, log2llog2, log2f, log2l

logb, logbf, logbl, _logb, _logbflogb, logbf, logbl, _logb, _logbf

lrint, lrintf, lrintllrint, lrintf, lrintl

_lrotl, _lrotr_lrotl, _lrotr

lround, lroundf, lroundllround, lroundf, lroundl

_matherr_matherr

__max__max

__min__min

modf, modffmodf, modff

nan, nanf, nanlnan, nanf, nanl

nanfnanf

nanlnanl

nearbyint, nearbyintf, nearbyintlnearbyint, nearbyintf, nearbyintl

nextafter, nextafterf, nextafterl, _nextafter, _nextafterf, nexttoward, nexttowardf, nexttowardlnextafter, nextafterf, nextafterl, _nextafter, _nextafterf, nexttoward, nexttowardf, nexttowardl

norm, normf, normlnorm, normf, norml

pow, powf, powlpow, powf, powl

remainder, remainderf, remainderlremainder, remainderf, remainderl

remquo, remquof, remquolremquo, remquof, remquol

rint, rintf, rintlrint, rintf, rintl

_rotl, _rotl64, _rotr, _rotr64_rotl, _rotl64, _rotr, _rotr64

round, roundf, roundlround, roundf, roundl

_scalb_scalb

scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnlscalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl

_set_controlfp_set_controlfp

_set_SSE2_enable_set_SSE2_enable

sin, sinf, sinlsin, sinf, sinl

sinh, sinhf, sinhlsinh, sinhf, sinhl

sqrt, sqrtf, sqrtlsqrt, sqrtf, sqrtl

_status87, _statusfp, _statusfp2_status87, _statusfp, _statusfp2

strtof, _strtof_lstrtof, _strtof_l

strtold, _strtold_lstrtold, _strtold_l

tan, tanf, tanltan, tanf, tanl

tanh, tanhf, tanhltanh, tanhf, tanhl

tgamma, tgammaf, tgammaltgamma, tgammaf, tgammal

trunc, truncf, truncltrunc, truncf, truncl

_wtof, _wtof_l_wtof, _wtof_l

_y0, _y1, _yn_y0, _y1, _yn

참고 항목See Also

범주별 런타임 루틴Run-Time Routines by Category