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
, fabs
atau fabsl
tergantung pada apakah Anda meneruskan float
nilai , , double
atau 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 float
nilai kompleks , , double
dan 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.
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.