Bagikan melalui


Dukungan matematika dan titik mengambang

Pustaka Universal C Runtime (UCRT) menyediakan banyak fungsi pustaka matematika integral dan floating-point, termasuk semua fungsi yang diperlukan oleh ISO C99. Fungsi floating-point diimplementasikan untuk menyeimbangkan performa dengan kebenaran. Karena menghasilkan hasil yang dibulatkan dengan benar mungkin sangat mahal, fungsi-fungsi ini dirancang untuk secara efisien menghasilkan perkiraan yang dekat dengan hasil yang dibulatkan dengan benar. Dalam kebanyakan kasus, hasil yang dihasilkan berada dalam +/-1 ULP (satuan presisi paling sedikit) dari hasil yang dibulatkan dengan benar, meskipun mungkin ada kasus di mana ada ketidakakuratan yang lebih besar.

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. Lihat Matematika generik jenis untuk detailnya.

Banyak fungsi pustaka matematika titik mengambang memiliki implementasi yang berbeda untuk arsitektur CPU yang berbeda. Misalnya, CRT x86 32-bit mungkin memiliki implementasi yang berbeda dari CRT x64 64-bit. Selain itu, beberapa fungsi mungkin memiliki beberapa implementasi untuk arsitektur CPU tertentu. Implementasi yang paling efisien dipilih secara dinamis pada run-time tergantung pada set instruksi yang didukung oleh CPU. Misalnya, dalam CRT x86 32-bit, beberapa fungsi memiliki implementasi x87 dan implementasi SSE2. Saat berjalan pada CPU yang mendukung SSE2, implementasi SSE2 yang lebih cepat digunakan. Saat berjalan pada CPU yang tidak mendukung SSE2, implementasi x87 yang lebih lambat digunakan. Karena implementasi yang berbeda dari fungsi pustaka matematika dapat menggunakan instruksi CPU yang berbeda dan algoritma yang berbeda untuk menghasilkan hasilnya, fungsi dapat menghasilkan hasil yang berbeda di seluruh CPU. Dalam kebanyakan kasus, hasilnya berada dalam +/-1 ULP dari hasil yang dibulatkan dengan benar, tetapi hasil aktual dapat bervariasi di seluruh CPU.

Microsoft C/C++ dan Microsoft Visual C++ versi 16-bit sebelumnya mendukung jenis sebagai long double jenis data floating-point presisi 80-bit. Dalam versi Visual C++yang lebih baru, long double jenis data adalah jenis data floating-point presisi 64-bit yang identik dengan jenis tersebut double . Kompiler memperlakukan long double dan double sebagai jenis yang berbeda, tetapi long double fungsinya identik dengan rekan-rekan mereka double . CRT menyediakan long double versi fungsi matematika untuk kompatibilitas kode sumber ISO C99, tetapi perhatikan bahwa representasi biner mungkin berbeda dari kompilator lain.

Rutinitas matematika dan floating-point yang didukung

Rutin Gunakan
abs, labs, llabs, _abs64 Menghitung nilai absolut dari jenis bilangan bulat
acos, acosf, acosl Menghitung kosinus busur
acosh, acoshf, acoshl Menghitung kosinus busur hiperbolik
asin, asinf, asinl Menghitung sinus busur
asinh, asinhf, asinhl Menghitung sinus busur hiperbolik
atan, atanf, atanl, atan2, atan2f, atan2l Menghitung tangen busur
atanh, atanhf, atanhl Menghitung tangen busur hiperbolik
_atodbl, _atodbl_l Mengonversi string khusus lokal menjadi double
atof, _atof_l Mengonversi string menjadi double
_atoflt, _atoflt_l, _atoldbl, _atoldbl_l Mengonversi string khusus lokal ke float atau long double
cbrt, cbrtf, cbrtl Menghitung akar kubus
ceil, ceilf, ceill Menghitung langit-langit
_chgsign, _chgsignf, _chgsignl Menghitung inversi aditif
_clear87, _clearfp Mendapatkan dan menghapus register status floating-point
_control87, _controlfp, __control87_2 Mendapatkan dan mengatur kata kontrol floating-point
_controlfp_s Versi aman dari _controlfp
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl Mengembalikan nilai yang memiliki besaran satu argumen dan tanda yang lain
cos, cosf, cosl Menghitung sinus
cosh, coshf, coshl Menghitung sinus hiperbolik
div, ldiv, lldiv Menghitung kuota dan sisa dua nilai bilangan bulat
_ecvt, ecvt Mengonversi menjadi double string
_ecvt_s Versi aman dari _ecvt
erf, erff, erfl Menghitung fungsi kesalahan
erfc, erfcf, erfcl Menghitung fungsi kesalahan pelengkap
exp, expf, expl Menghitung eksponensial ex
exp2, exp2f, exp2l Menghitung eksponensial 2x
expm1, expm1f, expm1l Menghitung ex-1
fabs, fabsf, fabsl Menghitung nilai absolut dari jenis floating-point
_fcvt, fcvt Mengonversi angka floating-point menjadi string
_fcvt_s Versi aman dari _fcvt
fdim, fdimf, fdiml Menentukan perbedaan positif antara dua nilai
feclearexcept Menghapus pengecualian floating-point yang ditentukan
fegetenv Menyimpan lingkungan floating-point saat ini
fegetexceptflag Mendapatkan status pengecualian floating-point yang ditentukan
fegetround Mendapatkan mode pembulatan titik mengambang
feholdexcept Mengatur mode pengecualian titik mengambang tanpa henti
feraiseexcept Menaikkan pengecualian floating-point yang ditentukan
fesetenv Mengatur lingkungan floating-point saat ini
fesetexceptflag Mengatur bendera status floating-point yang ditentukan
fesetround Mengatur mode pembulatan titik mengambang yang ditentukan
fetestexcept Menentukan bendera status pengecualian titik mengambang mana yang diatur
feupdateenv Memulihkan lingkungan titik mengambang lalu memunculkan pengecualian sebelumnya
floor, floorf, floorl Menghitung lantai
fma, fmaf, fmal Menghitung multiply-add yang menyatu
fmax, fmaxf, fmaxl Menghitung maksimum argumen
fmin, fminf, fminl Menghitung minimum argumen
fmod, fmodf, fmodl Menghitung sisa titik mengambang
_fpclass, _fpclassf Mengembalikan klasifikasi nilai floating-point
fpclassify Mengembalikan klasifikasi nilai floating-point
_fpieee_flt Mengatur handler untuk pengecualian floating-point
_fpreset Mereset lingkungan floating-point
frexp, frexpf, frexpl Mendapatkan mantissa dan eksponen dari angka floating-point
_gcvt, gcvt Mengonversi angka floating-point menjadi string
_gcvt_s Versi aman dari _gcvt
_get_FMA3_enable, _set_FMA3_enable Mendapatkan atau mengatur bendera untuk penggunaan instruksi FMA3 pada x64
hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl Menghitung hipotenus
ilogb, ilogbf, ilogbl Menghitung eksponen base-2 bilangan bulat
imaxabs Menghitung nilai absolut dari jenis bilangan bulat
imaxdiv Menghitung kuota dan sisa dua nilai bilangan bulat
isfinite, _finite, _finitef Menentukan apakah nilai terbatas
isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered Membandingkan urutan dua nilai titik pecahan
isinf Menentukan apakah nilai floating-point tidak terbatas
isnan, _isnan, _isnanf Menguji nilai floating-point untuk NaN
isnormal Menguji apakah nilai floating-point terbatas dan bukan subnormal
_j0, _j1, _jn Menghitung fungsi Bessel
ldexp, ldexpf, ldexpl Komputasi x*2n
lgamma, lgammaf, lgammal Menghitung logaritma alami dari nilai absolut fungsi gamma
llrint, llrintf, llrintl Membulatkan nilai floating-point ke nilai terdekat long long
llround, llroundf, llroundl Membulatkan nilai floating-point ke nilai terdekat long long
log, logf, logl, log10, log10f, log10l Menghitung logaritma alami atau base-10
log1p, log1pf, log1pl Menghitung logaritma alami 1+x
log2, log2f, log2l Menghitung logaritma base-2
logb, logbf, logbl, _logb, _logbf Mengembalikan eksponen dari nilai floating-point
lrint, lrintf, lrintl Membulatkan nilai floating-point ke nilai terdekat long
_lrotl, _lrotr Memutar nilai bilangan bulat ke kiri atau kanan
lround, lroundf, lroundl Membulatkan nilai floating-point ke nilai terdekat long
_matherr Penangan kesalahan matematika default
__max Makro yang mengembalikan nilai yang lebih besar dari dua nilai
__min Makro yang mengembalikan nilai yang lebih kecil dari dua nilai
modf, modff, modfl Membagi nilai floating-point menjadi bagian pecahan dan bilangan bulat
nan, nanf, nanl Mengembalikan nilai NaN yang diam
nearbyint, nearbyintf, nearbyintl Mengembalikan nilai yang dibulatkan
nextafter, nextafterf, nextafterl, _nextafter, _nextafterf Mengembalikan nilai floating-point berikutnya yang dapat diwakili
nexttoward, nexttowardf, nexttowardl Mengembalikan nilai floating-point berikutnya yang dapat diwakili
pow, powf, powl Mengembalikan nilai dari xy
remainder, remainderf, remainderl Menghitung sisa kuota dari dua nilai floating-point
remquo, remquof, remquol Menghitung sisa dua nilai bilangan bulat
rint, rintf, rintl Membulatkan nilai floating-point
_rotl, _rotl64, _rotr, _rotr64 Memutar bit dalam tipe bilangan bulat
round, roundf, roundl Membulatkan nilai floating-point
_scalb, _scalbf Menskalakan argumen dengan kekuatan 2
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl Mengalikan angka titik mengambang dengan kekuatan integral FLT_RADIX
_set_controlfp Mengatur kata kontrol titik mengambang
_set_SSE2_enable Mengaktifkan atau menonaktifkan instruksi SSE2
signbit Menguji bit tanda dari nilai floating-point
sin, sinf, sinl Menghitung sinus
sinh, sinhf, sinhl Menghitung sinus hiperbolik
sqrt, sqrtf, sqrtl Menghitung akar kuadrat
_status87, _statusfp, _statusfp2 Mendapatkan kata status floating-point
strtof, _strtof_l Mengonversi string menjadi float
strtold, _strtold_l Mengonversi string menjadi long double
tan, tanf, tanl Menghitung tangen
tanh, tanhf, tanhl Menghitung tangen hiperbolik
tgamma, tgammaf, tgammal Menghitung fungsi gamma
trunc, truncf, truncl Memotong bagian pecahan
_wtof, _wtof_l Mengonversi string lebar menjadi double
_y0, _y1, _yn Menghitung fungsi Bessel

Baca juga

Rutinitas runtime Universal C menurut kategori
Primitif titik mengambang