Condividi tramite


Operazione matematiche generiche di tipo

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.

Le funzioni matematiche della libreria di runtime C sono disponibili in varianti reali e complesse. Ogni variante è disponibile in tre versioni, a seconda del tipo dell'argomento: float, doublee long double. Poiché C non supporta l'overload come C++, ogni variante ha un nome diverso. Ad esempio, per ottenere il valore assoluto di un valore a virgola mobile reale, è necessario chiamare fabsf, fabso fabsl a seconda che si passi rispettivamente un floatvalore , doubleo long double . Per ottenere il valore assoluto complesso, è necessario chiamare uno di cabsf, cabso cabsl a seconda che si passi rispettivamente un floatvalore , doublee long double complesso. Se gli argomenti non corrispondono a nessuno dei tipi indicati in precedenza, la funzione viene scelta come se gli argomenti fossero double.

<tgmath.h> contiene macro che semplificano la selezione della funzione matematica corretta da chiamare. Le macro esaminano il tipo passato e quindi chiamano la funzione destra. Ad esempio, la sqrt macro viene sqrt(9.9f) associata a sqrtf(), ma viene associata sqrt(9.9) a sqrt(). Se almeno un argomento macro per un parametro generico è complesso, la macro viene associata a una funzione complessa; in caso contrario, richiama una funzione reale.

Le macro generiche di tipo in <tgmath.h> consentono di scrivere codice più portabile perché non è necessario gestire il cast o selezionare nomi di funzione diversi a seconda del tipo di argomento.

Queste macro si trovano nella propria intestazione in modo che i programmi scritti usando l'intestazione <math.h> non si interrompano. Quindi double x = sin(42); si comporta come sempre quando si include <math.h>. Anche in questo caso, la maggior parte dei programmi C esistenti dovrebbe non essere interessata quando l'intestazione <tgmath.h> è inclusa invece di <math.h> o <complex.h>.

Nella tabella seguente sono elencate le macro disponibili in <tgmath.h> e le dimensioni in cui vengono espanse. modf non è incluso in questa tabella perché non ha una macro generica di tipo corrispondente perché non è chiaro come renderla sicura senza complicare la risoluzione dei tipi.

Macro Reale
float
Reale
double
Reale
long double
Complesso
float
Complesso
double
Complesso
long double
acos acosf acos acosl cacosf cacos cacosl
acosh acoshf acosh acoshl cacoshf cacosh cacoshl
asin asinf asin asinl casinf casin casinl
asinh asinhf asinh asinhl casinhf casinh casinhl
atan atanf atan atanl catanf catan catanl
atanh atanhf atanh atanhl catanhf catanh catanhl
cos cosf cos cosl ccosf ccos ccosl
cosh coshf cosh coshl ccoshf ccosh ccoshl
exp expf exp expl cexpf cexp cexpl
fabs fabsf fabs fabsl cabsf cabs cabsl
log logf log logl clogf clog clogl
pow powf pow powl cpowf cpow cpowl
sin sinf sin sinl csinf csin csinl
sinh sinhf sinh sinhl csinhf csinh csinhl
sqrt sqrtf sqrt sqrtl csqrtf csqrt csqrtl
tan tanf tan tanl ctanf ctan ctanl
tanh tanhf tanh tanhl ctanhf ctanh ctanhl
atan2 atan2f atan2 atan2l - - -
cbrt cbrtf cbrt cbrtl - - -
ceil ceilf ceil ceill - - -
copysign copysignf copysign copysignl - - -
erf erff erf erfl - - -
erfc erfcf erfc erfcl - - -
exp2 exp2f exp2 exp2l - - -
expm1 expm1f expm1 expm1l - - -
fdim fdimf fdim fdiml - - -
floor floorf floor floorl - - -
fma fmaf fma fmal - - -
fmax fmaxf fmax fmaxl - - -
fmin fminf fmin fminl - - -
fmod fmodf fmod fmodl - - -
frexp frexpf frexp frexpl - - -
hypot hypotf hypot hypotl - - -
ilogb ilogbf ilogb ilogbl - - -
ldexp ldexpf ldexp ldexpl - - -
lgamma lgammaf lgamma lgammal - - -
llrint llrintf llrint llrintl - - -
llround llroundf llround llroundl - - -
log10 log10f log10 log10l - - -
log1p log1pf log1p log1pl - - -
log2 log2f log2 log2l - - -
logb logbf logb logbl - - -
lrint lrintf lrint lrintl - - -
lround lroundf lround lroundl - - -
nearbyint nearbyintf nearbyint nearbyintl - - -
nextafter nextafterf nextafter nextafterl - - -
nexttoward nexttowardf nexttoward nexttowardl - - -
remainder remainderf remainder remainderl - - -
remquo remquof remquo remquol - - -
rint rintf rint rintl - - -
round roundf round roundl - - -
scalbln scalblnf scalbln scalblnl - - -
scalbn scalbnf scalbn scalbnl - - -
tgamma tgammaf tgamma tgammal - - -
trunc truncf trunc truncl - - -
carg - - - cargf carg cargl
conj - - - conjf conj conjl
creal - - - crealf creal creall
cimag - - - cimagf cimag cimagl
cproj - - - cprojf cproj cprojl

Requisiti

Eseguire la compilazione con /std:c11.

Windows SDK 10.0.20348.0 (versione 2104) o versione successiva. Vedi Windows SDK per scaricare l'SDK più recente. Per istruzioni su come installare e usare l'SDK per lo sviluppo C11 e C17, vedere Installare il supporto C11 e C17 in Visual Studio.

Vedi anche

Informazioni di riferimento sulla libreria di runtime C