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
, double
e 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
, fabs
o fabsl
a seconda che si passi rispettivamente un float
valore , double
o long double
. Per ottenere il valore assoluto complesso, è necessario chiamare uno di cabsf
, cabs
o cabsl
a seconda che si passi rispettivamente un float
valore , double
e 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.
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.