Supporto delle funzioni matematiche e a virgola mobile

La libreria UWP (Universal C Runtime Library) fornisce molte funzioni di libreria matematica integrale e a virgola mobile, incluse tutte le funzioni richieste da ISO C99. L'implementazione delle funzioni a virgola mobile consente di bilanciare prestazioni e correttezza. 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. Nella maggior parte dei casi, il risultato prodotto si trova all'interno di +/-1 ULP (unità di precisione minima) del risultato arrotondato correttamente, anche se possono verificarsi casi in cui è presente una maggiore imprecisione.

Per ISO C Standard 11 (C11) e versioni successive, l'intestazione <tgmath.h> , oltre a includere <math.h> e <complex.h>, fornisce macro che richiamano una funzione matematica corrispondente in base ai tipi dei parametri. Per informazioni dettagliate, vedere La matematica generica dei tipi.

Molte delle funzioni della libreria delle operazioni matematiche a virgola mobile hanno implementazioni diverse per architetture della CPU differenti. La versione di CRT x86 a 32 bit, ad esempio, può avere un'implementazione diversa di CRT x64 a 64 bit. Alcune funzioni potrebbero inoltre avere più implementazioni per una particolare architettura della CPU. L'implementazione più efficiente viene selezionata in modo dinamico in fase di esecuzione a seconda del set di istruzioni supportate dalla CPU. Ad esempio, in CRT x86 a 32 bit alcune funzioni hanno sia un'implementazione x87 che un'implementazione SSE2. In caso di esecuzione su una CPU che supporta SSE2, viene usata l'implementazione SSE2 più veloce. Quando si esegue su una CPU che non supporta SSE2, viene usata l'implementazione x87 più lenta. 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. Nella maggior parte dei casi, i risultati si trovano all'interno di +/-1 ULP del risultato arrotondato correttamente, ma i risultati effettivi possono variare in base alle CPU.

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. 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. Il compilatore considera long double e double come tipi distinti, ma le funzioni long double sono identiche alle rispettive controparti double. 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.

Routine matematiche e a virgola mobile supportate

Ciclo Utilizzo
abs, labs, llabs_abs64 Calcola il valore assoluto di un tipo Integer
acos, acosf, acosl Calcola l'arcocoseno
acosh, acoshf, acoshl Calcola l'arcocoseno iperbolico
asin, asinf, asinl Calcola l'arcoseno
asinh, asinhf, asinhl Calcola l'arcoseno iperbolico
atan, atanf, atanl, atan2, atan2fatan2l Calcola l'arcotangente
atanh, atanhf, atanhl Calcola l'arcotangente iperbolica
_atodbl, _atodbl_l Converte una stringa specifica delle impostazioni locali in un oggetto double
atof, _atof_l Converte una stringa in un oggetto double
_atoflt, _atoflt_l, _atoldbl_atoldbl_l Converte una stringa specifica delle impostazioni locali in un oggetto float o long double
cbrt, cbrtf, cbrtl Calcola la radice cubica
ceil, ceilf, ceill Calcola il limite massimo
_chgsign, _chgsignf, _chgsignl Calcola l'inverso additivo
_clear87, _clearfp Ottiene e cancella il registro di stato a virgola mobile
_control87, _controlfp, __control87_2 Ottiene e imposta la parola di controllo a virgola mobile
_controlfp_s Versione sicura di _controlfp
copysign, copysignf, copysignl, _copysign, _copysignf_copysignl Restituisce un valore che ha la grandezza di un argomento e il segno di un altro
cos, cosf, cosl Calcola il seno
cosh, coshf, coshl Calcola il seno iperbolico
div, ldiv, lldiv Calcola il quoziente e il resto di due valori Integer
_ecvt, ecvt Converte un oggetto double in una stringa
_ecvt_s Versione sicura di _ecvt
erf, erff, erfl Calcola la funzione di errore
erfc, erfcf, erfcl Calcola la funzione di errore complementare
exp, expf, expl Calcola l'esponenziale ex
exp2, exp2f, exp2l Calcola l'esponenziale 2x
expm1, expm1f, expm1l Calcola ex-1
fabs, fabsf, fabsl Calcola il valore assoluto di un tipo a virgola mobile
_fcvt, fcvt Converte un numero a virgola mobile in una stringa
_fcvt_s Versione sicura di _fcvt
fdim, fdimf, fdiml Determina la differenza positiva tra due valori
feclearexcept Cancella le eccezioni a virgola mobile specificate
fegetenv Archivia l'ambiente a virgola mobile corrente
fegetexceptflag Ottiene lo stato delle eccezioni a virgola mobile specificate
fegetround Ottiene la modalità di arrotondamento a virgola mobile
feholdexcept Imposta la modalità di eccezione a virgola mobile senza interruzioni
feraiseexcept Genera le eccezioni a virgola mobile specificate
fesetenv Imposta l'ambiente a virgola mobile corrente
fesetexceptflag Imposta i flag di stato a virgola mobile specificati
fesetround Imposta la modalità di arrotondamento a virgola mobile specificata
fetestexcept Determina quali flag di stato delle eccezioni a virgola mobile sono impostati
feupdateenv Ripristina un ambiente a virgola mobile e quindi genera le eccezioni precedenti
floor, floorf, floorl Calcola il limite minimo
fma, fmaf, fmal Calcola un'operazione congiunta di moltiplicazione e addizione
fmax, fmaxf, fmaxl Calcola il valore massimo degli argomenti
fmin, fminf, fminl Calcola il minimo degli argomenti
fmod, fmodf, fmodl Calcola il resto a virgola mobile
_fpclass, _fpclassf Restituisce la classificazione di un valore a virgola mobile
fpclassify Restituisce la classificazione di un valore a virgola mobile
_fpieee_flt Imposta un gestore per le eccezioni a virgola mobile
_fpreset Reimposta l'ambiente a virgola mobile
frexp, frexpf, frexpl Ottiene la mantissa e l'esponente di un numero a virgola mobile
_gcvt, gcvt Converte un numero a virgola mobile in una stringa
_gcvt_s Versione sicura di _gcvt
_get_FMA3_enable, _set_FMA3_enable Ottiene o imposta un flag per l'uso di istruzioni FMA3 su x64
hypot, hypotf, hypotl, _hypot, _hypotf_hypotl Calcola l'ipotenusa
ilogb, ilogbf, ilogbl Calcola l'esponente in base 2 come valore Integer
imaxabs Calcola il valore assoluto di un tipo Integer
imaxdiv Calcola il quoziente e il resto di due valori Integer
isfinite, _finite, _finitef Determina se un valore è finito
isgreater, isgreaterequal, isless, islessequal, islessgreaterisunordered Confrontare l'ordine di due valori a virgola mobile
isinf Determina se un valore a virgola mobile è infinito
isnan, _isnan, _isnanf Verifica se un valore a virgola mobile è un valore NaN
isnormal Verifica se un valore a virgola mobile è sia finito sia non subnormale
_j0, _j1, _jn Calcola la funzione di Bessel
ldexp, ldexpf, ldexpl Calcola x*2n
lgamma, lgammaf, lgammal Calcola il logaritmo naturale del valore assoluto della funzione gamma
llrint, llrintf, llrintl Arrotonda un valore a virgola mobile al valore più long long vicino
llround, llroundf, llroundl Arrotonda un valore a virgola mobile al valore più long long vicino
log, logf, logl, log10, log10flog10l Calcola il logaritmo naturale o in base 10
log1p, log1pf, log1pl Calcola il logaritmo naturale di 1+x
log2, log2f, log2l Calcola il logaritmo in base 2
logb, logbf, logbl, _logb_logbf Restituisce l'esponente di un valore a virgola mobile
lrint, lrintf, lrintl Arrotonda un valore a virgola mobile al valore più long vicino
_lrotl, _lrotr Ruota un valore Integer a sinistra o a destra
lround, lroundf, lroundl Arrotonda un valore a virgola mobile al valore più long vicino
_matherr Gestore di errori matematici predefinito
__max Macro che restituisce il maggiore di due valori
__min Macro che restituisce il minore di due valori
modf, modff, modfl Divide un valore a virgola mobile in parte frazionaria e parte intera
nan, nanf, nanl Restituisce un valore NaN non interattivo
nearbyint, nearbyintf, nearbyintl Restituisce il valore arrotondato
nextafter, nextafterf, nextafterl, _nextafter_nextafterf Restituisce il valore a virgola mobile rappresentabile successivo
nexttoward, nexttowardf, nexttowardl Restituisce il valore a virgola mobile rappresentabile successivo
pow, powf, powl Restituisce il valore di xy
remainder, remainderf, remainderl Calcola il resto del quoziente di due valori a virgola mobile
remquo, remquof, remquol Calcola il resto di due valori Integer
rint, rintf, rintl Arrotonda un valore a virgola mobile
_rotl, _rotl64, _rotr_rotr64 Ruota i bit in tipi Integer
round, roundf, roundl Arrotonda un valore a virgola mobile
_scalb, _scalbf Eleva l'argomento alla potenza di 2
scalbn, scalbnf, scalbnl, scalbln, scalblnfscalblnl Moltiplica un numero a virgola mobile per una potenza integrale di FLT_RADIX
_set_controlfp Imposta la parola di controllo a virgola mobile
_set_SSE2_enable Abilita o disabilita le istruzioni SSE2
signbit Verifica il bit più significativo di un valore a virgola mobile
sin, sinf, sinl Calcola il seno
sinh, sinhf, sinhl Calcola il seno iperbolico
sqrt, sqrtf, sqrtl Calcola la radice quadrata
_status87, _statusfp, _statusfp2 Ottiene la parola di stato nelle operazioni a virgola mobile
strtof, _strtof_l Converte una stringa in un oggetto float
strtold, _strtold_l Converte una stringa in un oggetto long double
tan, tanf, tanl Calcola la tangente
tanh, tanhf, tanhl Calcola la tangente iperbolica
tgamma, tgammaf, tgammal Calcola la funzione gamma
trunc, truncf, truncl Tronca la parte frazionaria
_wtof, _wtof_l Converte una stringa wide in un oggetto double
_y0, _y1, _yn Calcola la funzione di Bessel

Vedi anche

Routine di Universal C Runtime per categoria
Primitive a virgola mobile