Megosztás:


Típus-általános matematika

Az ISO C Standard 11 (C11) és újabb verziók esetén a fejléc a <tgmath.h> paraméterek típusai alapján a megfelelő matematikai függvényt meghívó makrókat is tartalmaz a beleadás és <math.h>a beleadás <complex.h> mellett.

A C futtatókörnyezeti kódtár matematikai függvényei valós és összetett változatokban jelennek meg. Minden változat háromféle ízben érhető el az argumentum típusától függően: float, doubleés long double. Mivel a C nem támogatja a túlterhelést, mint a C++ esetében, minden változatnak más a neve. Ha például egy valós lebegőpontos érték abszolút értékét szeretné lekérni, akkor a fabsf, fabs vagy fabsl függvényt kell meghívnia attól függően, hogy egy float, double vagy long double értéket ad át. Az összetett abszolút érték lekéréséhez hívja meg valamelyik cabsf, cabs vagy cabsl függvényt, attól függően, hogy egy float, double vagy long double összetett értéket ad át. Ha az argumentumok nem egyeznek a fent említett típusok egyikével sem, a függvény úgy lesz kiválasztva, mintha az argumentumok duplázódtak volna.

<tgmath.h> olyan makrókat tartalmaz, amelyek megkönnyítik a megfelelő matematikai függvény kiválasztását. A makrók megvizsgálják az átadott típust, majd meghívják a megfelelő függvényt. Például, a makró sqrt-t sqrt(9.9f)-hoz köt, de sqrtf()-t sqrt(9.9)-hoz köt. Ha egy általános paraméter legalább egy makróargumentuma összetett, akkor a makró egy összetett függvényhez kötődik; ellenkező esetben valós függvényt hív meg.

A típus-általános makrók <tgmath.h> lehetővé teszik, hogy hordozhatóbb kódot írjon, mert az argumentum típusától függően nem kell kezelnie a kasztolásokat, és nem kell különböző függvénynevek kiválasztásával bajlódnia.

Ezek a makrók a saját fejlécükben vannak, így a <math.h> fejlécet használó programok nem fognak megszakadni. Így double x = sin(42); úgy viselkedik, mint mindig, amikor a <math.h>-t használja. Ennek ellenére a legtöbb meglévő C-program várhatóan nem lesz érintett, amikor a <tgmath.h> fejlécet illesztik be <math.h> vagy <complex.h> helyett.

Az alábbi táblázat felsorolja a rendelkezésre álló <tgmath.h> makrókat, és hogy mire terjednek ki. modf nem szerepel ebben a táblában, mert nem rendelkezik megfelelő típus-általános makróval, mert nem egyértelmű, hogyan teheti biztonságossá a típusfeloldás bonyolítása nélkül.

Makró Valódi
float
Valódi
double
Valódi
long double
Összetett
float
Összetett
double
Összetett
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

Követelmények

Fordítsa le a(z) /std:c11.

Windows SDK 10.0.20348.0 (2104-es verzió) vagy újabb. A legújabb SDK letöltéséhez tekintse meg a Windows SDK-t. A C11-hez és C17-hez készült SDK telepítésével és használatával kapcsolatos utasításokat a C11 és C17 telepítése a Visual Studióban című témakörben találja.

Lásd még

C Run-Time kódtár referenciája