Bagikan melalui


Matematika generik jenis

Untuk ISO C Standard 11 (C11) dan yang lebih baru, <tgmath.h> header, selain menyertakan <math.h> dan <complex.h>, menyediakan makro yang memanggil fungsi matematika yang sesuai berdasarkan jenis parameter.

Fungsi matematika pustaka runtime C hadir dalam varian nyata dan kompleks. Setiap varian hadir dalam tiga rasa, tergantung pada jenis argumen: float, double, dan long double. Karena C tidak mendukung kelebihan beban seperti C++, setiap varian memiliki nama yang berbeda. Misalnya, untuk mendapatkan nilai absolut dari nilai floating-point nyata, Anda akan memanggil , fabsf, fabsatau fabsl tergantung pada apakah Anda meneruskan floatnilai , , doubleatau long double masing-masing. Untuk mendapatkan nilai absolut yang kompleks, Anda akan memanggil salah satu dari cabsf, cabs, atau cabsl tergantung pada apakah Anda meneruskan floatnilai kompleks , , doubledan long double , masing-masing. Jika argumen tidak cocok dengan salah satu jenis yang disebutkan di atas, fungsi dipilih seolah-olah argumennya ganda.

<tgmath.h> berisi makro yang menyederhanakan pemilihan fungsi matematika yang tepat untuk dipanggil. Makro memeriksa jenis yang diteruskan lalu memanggil fungsi yang tepat. Misalnya, sqrt makro mengikat sqrt(9.9f) ke sqrtf(), tetapi mengikat sqrt(9.9) ke sqrt(). Jika setidaknya satu argumen makro untuk parameter generik kompleks, maka makro mengikat ke fungsi yang kompleks; jika tidak, ia memanggil fungsi nyata.

Makro type-generic di <tgmath.h> memungkinkan Anda menulis lebih banyak kode portabel karena Anda tidak perlu mengelola transmisi atau memilih nama fungsi yang berbeda tergantung pada jenis argumen.

Makro ini berada di header mereka sendiri sehingga program yang ditulis menggunakan <math.h> header tidak akan rusak. Jadi double x = sin(42); berulah seperti biasanya ketika Anda menyertakan <matematika.h>. Meskipun demikian, sebagian besar program C yang ada diharapkan tidak terpengaruh ketika <tgmath.h> header disertakan alih-alih <math.h> atau <complex.h>.

Tabel berikut ini mencantumkan makro yang tersedia di dan <tgmath.h> apa yang diperluas. modf tidak disertakan dalam tabel ini karena tidak memiliki makro generik jenis yang sesuai karena tidak jelas cara membuatnya aman tanpa resolusi jenis yang rumit.

Makro Nyata
float
Nyata
double
Nyata
long double
Kompleks
float
Kompleks
double
Kompleks
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

Persyaratan

Kompilasikan dengan /std:c11.

Windows SDK 10.0.20348.0 (versi 2104) atau yang lebih baru. Lihat Windows SDK untuk mengunduh SDK terbaru. Untuk instruksi menginstal dan menggunakan SDK untuk pengembangan C11 dan C17, lihat Menginstal dukungan C11 dan C17 di Visual Studio.

Baca juga

Referensi pustaka Run-Time C