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 , atan2f atan2l |
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 , islessgreater isunordered |
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 , log10f log10l |
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 x y |
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 , scalblnf scalblnl |
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