Supporto a virgola mobileFloating-Point Support

La libreria di runtime di Microsoft C (CRT) include molte funzioni della libreria delle operazioni matematiche a virgola bile, incluse tutte quelle richieste dallo standard ISO C99.The Microsoft C Runtime library (CRT) provides many floating point math library functions, including all of those required by ISO C99. L'implementazione di queste funzioni consente di bilanciare prestazioni e correttezza.These functions are implemented to balance performance with correctness. Dato che generare un risultato con il corretto arrotondamento può avere costi proibitivi, queste funzioni sono progettate per ottenere in modo efficiente un'approssimazione molto vicina al risultato arrotondato correttamente.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. Nella maggior parte dei casi, il risultato prodotto è compreso entro +/-1 ulp rispetto al risultato arrotondato correttamente, sebbene in alcuni casi possa esistere un'imprecisione maggiore.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.

Molte delle funzioni della libreria delle operazioni matematiche a virgola mobile hanno implementazioni diverse per architetture della CPU differenti.Many of the floating point math library functions have different implementations for different CPU architectures. La versione di CRT x86 a 32 bit, ad esempio, può avere un'implementazione diversa di CRT x64 a 64 bit.For example, the 32-bit x86 CRT may have a different implementation than the 64-bit x64 CRT. Alcune funzioni potrebbero inoltre avere più implementazioni per una particolare architettura della CPU.In addition, some of the functions may have multiple implementations for a given CPU architecture. L'implementazione più efficiente viene selezionata in modo dinamico in fase di esecuzione a seconda del set di istruzioni supportate dalla CPU.The most efficient implementation is selected dynamically at run-time depending on the instruction sets supported by the CPU. Ad esempio, in CRT x86 a 32 bit alcune funzioni hanno sia un'implementazione x87 che un'implementazione SSE2.For example, in the 32-bit x86 CRT, some functions have both an x87 implementation and an SSE2 implementation. In caso di esecuzione su una CPU che supporta SSE2, viene usata l'implementazione SSE2 più veloce.When running on a CPU that supports SSE2, the faster SSE2 implementation is used. Per l'esecuzione su una CPU che non supporta SSE2 viene usata l'implementazione x87 più lenta.When running on a CPU that does not support SSE2, the slower x87 implementation is used. Dato che implementazioni diverse delle funzioni della libreria delle operazioni matematiche possono usare istruzioni diverse della CPU e algoritmi differenti per produrre i risultati, le funzioni possono produrre risultati diversi con CPU differenti.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. Nella maggior parte dei casi, i risultati sono compresi entro +/-1 ulp rispetto al risultato arrotondato correttamente, ma i risultati effettivi possono variare tra CPU diverse.In most cases, the results are within +/-1 ulp of the correctly rounded result, but the actual results may vary across CPUs.

Le versioni precedenti a 16 bit di Microsoft C/C++ e Microsoft Visual C++ supportano il tipo long double come tipo di dati a virgola mobile con precisione 80 bit.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. Nelle versioni successive di Visual C++, il tipo di dati long double è un tipo di dati a virgola mobile con precisione a 64 bit identico al tipo double.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. Il compilatore considera long double e double come tipi distinti, ma le funzioni long double sono identiche alle rispettive controparti double.The compiler treats long double and double as distinct types, but the long double functions are identical to their double counterparts. CRT include versioni long double delle funzioni matematiche per la compatibilità con il codice sorgente ISO C99, ma tenere presente che la rappresentazione binaria può differire da altri compilatori.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 supporta queste funzioni per operazioni a virgola mobile: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

Vedere ancheSee Also

Routine di runtime per categoriaRun-Time Routines by Category