Matematik ve kayan nokta desteği
Evrensel C Çalışma Zamanı kitaplığı (UCRT), ISO C99'un gerektirdiği tüm işlevler de dahil olmak üzere birçok integral ve kayan nokta matematik kitaplığı işlevi sağlar. Kayan nokta işlevleri, performansı doğrulukla dengelemek için uygulanır. Doğru yuvarlatılmış sonucun üretilmesi çok pahalı olabileceğinden, bu işlevler doğru yuvarlanmış sonuca yakın bir tahmini verimli bir şekilde üretecek şekilde tasarlanmıştır. Çoğu durumda, üretilen sonuç doğru yuvarlanmış sonucun +/-1 ULP (en az duyarlık birimi) içindedir, ancak daha fazla yanlışlık olduğu durumlar olabilir.
ISO C Standard 11 (C11) ve üzeri için, <tgmath.h>
ve <complex.h>
eklemeye <math.h>
ek olarak üst bilgi, parametrelerin türlerine göre karşılık gelen matematik işlevini çağıran makrolar sağlar. Ayrıntılar için bkz . Tür genel matematik .
Kayan nokta matematik kitaplığı işlevlerinin birçoğu farklı CPU mimarileri için farklı uygulamalara sahiptir. Örneğin, 32 bit x86 CRT, 64 bit x64 CRT'den farklı bir uygulamaya sahip olabilir. Ayrıca, bazı işlevlerin belirli bir CPU mimarisi için birden çok uygulaması olabilir. En verimli uygulama, CPU tarafından desteklenen yönerge kümelerine bağlı olarak çalışma zamanında dinamik olarak seçilir. Örneğin, 32 bit x86 CRT'de bazı işlevlerin hem x87 uygulaması hem de SSE2 uygulaması vardır. SSE2'yi destekleyen bir CPU üzerinde çalışırken, daha hızlı SSE2 uygulaması kullanılır. SSE2'yi desteklemeyen bir CPU üzerinde çalışırken, daha yavaş x87 uygulaması kullanılır. Matematik kitaplığı işlevlerinin farklı uygulamaları, sonuçlarını üretmek için farklı CPU yönergeleri ve farklı algoritmalar kullanabileceğinden, işlevler CPU'lar arasında farklı sonuçlar üretebilir. Çoğu durumda, sonuçlar doğru yuvarlanmış sonucun +/-1 ULP'sindedir, ancak gerçek sonuçlar CPU'lar arasında farklılık gösterebilir.
Microsoft C/C++ ve Microsoft Visual C++'ın önceki 16 bit sürümleri, türü 80 bit duyarlık kayan long double
nokta veri türü olarak destekliyor. Visual C++'ın sonraki sürümlerinde veri türü, türüyle long double
aynı olan 64 bit duyarlık kayan double
nokta veri türüdür. Derleyici ve double
değerlerini ayrı türler olarak ele alırlong double
, ancak long double
işlevler karşılık gelenleriyle double
aynıdır. CRT, ISO C99 kaynak kodu uyumluluğu için matematik işlevlerinin sürümlerini sağlar long double
, ancak ikili gösterimin diğer derleyicilerden farklı olabileceğini unutmayın.
Desteklenen matematik ve kayan nokta yordamları
Yordam | Kullanma |
---|---|
abs , labs , llabs , _abs64 |
Tamsayı türünün mutlak değerini hesaplar |
acos , acosf , acosl |
Ark kosinüsünü hesaplar |
acosh , acoshf , acoshl |
Hiperbolik ark kosinüsünü hesaplar |
asin , asinf , asinl |
Ark sinüsünü hesaplar |
asinh , asinhf , asinhl |
Hiperbolik ark sinüsünü hesaplar |
atan , atanf , atanl , , atan2 , atan2f , atan2l |
Yay tanjantını hesaplar |
atanh , atanhf , atanhl |
Hiperbolik yay tanjantını hesaplar |
_atodbl , _atodbl_l |
Yerel ayara özgü bir dizeyi bir double |
atof , _atof_l |
Dizeyi bir dizeye dönüştürür double |
_atoflt , _atoflt_l , _atoldbl , _atoldbl_l |
Yerel ayara özgü bir dizeyi veya float değerine dönüştürür long double |
cbrt , cbrtf , cbrtl |
Küp kökünü hesaplar |
ceil , ceilf , ceill |
Tavanı hesaplar |
_chgsign , _chgsignf , _chgsignl |
Ekleme tersini hesaplar |
_clear87 , _clearfp |
Kayan nokta durum kaydını alır ve temizler |
_control87 , _controlfp , __control87_2 |
Kayan nokta denetim sözcüğünü alır ve ayarlar |
_controlfp_s |
Güvenli sürümü _controlfp |
copysign , copysignf , copysignl , , _copysign , _copysignf , _copysignl |
Bir bağımsız değişkenin büyüklüğüne ve başka bir bağımsız değişkenin işaretine sahip bir değer döndürür |
cos , cosf , cosl |
Sinüsü hesaplar |
cosh , coshf , coshl |
Hiperbolik sinüsü hesaplar |
div , ldiv , lldiv |
İki tamsayı değerinin bölümünü ve geri kalanını hesaplar |
_ecvt , ecvt |
Bir double dizeye dönüştürür |
_ecvt_s |
Güvenli sürümü _ecvt |
erf , erff , erfl |
Hata işlevini hesaplar |
erfc , erfcf , erfcl |
Tamamlayıcı hata işlevini hesaplar |
exp , expf , expl |
Üstel ex'i hesaplar |
exp2 , exp2f , exp2l |
Üstel 2x'i hesaplar |
expm1 , expm1f , expm1l |
İşlemler ex-1 |
fabs , fabsf , fabsl |
Kayan nokta türünün mutlak değerini hesaplar |
_fcvt , fcvt |
Kayan noktalı sayıyı dizeye dönüştürür |
_fcvt_s |
Güvenli sürümü _fcvt |
fdim , fdimf , fdiml |
İki değer arasındaki pozitif farkı belirler |
feclearexcept |
Belirtilen kayan nokta özel durumlarını temizler |
fegetenv |
Geçerli kayan nokta ortamını depolar |
fegetexceptflag |
Belirtilen kayan nokta özel durum durumunu alır |
fegetround |
Kayan nokta yuvarlama modunu alır |
feholdexcept |
Duramayan kayan nokta özel durum modunu ayarlar |
feraiseexcept |
Belirtilen kayan nokta özel durumlarını oluşturur |
fesetenv |
Geçerli kayan nokta ortamını ayarlar |
fesetexceptflag |
Belirtilen kayan nokta durum bayraklarını ayarlar |
fesetround |
Belirtilen kayan nokta yuvarlama modunu ayarlar |
fetestexcept |
Hangi kayan nokta özel durum bayraklarının ayarlandığını belirler |
feupdateenv |
Kayan nokta ortamını geri yükler ve ardından önceki özel durumları oluşturur |
floor , floorf , floorl |
Zemini hesaplar |
fma , fmaf , fmal |
Birleştirilmiş çarpma-ekleme hesaplar |
fmax , fmaxf , fmaxl |
Bağımsız değişkenlerin en yüksek sayısını hesaplar |
fmin , fminf , fminl |
Bağımsız değişkenlerin en düşük sayısını hesaplar |
fmod , fmodf , fmodl |
Kayan nokta geri kalanını hesaplar |
_fpclass , _fpclassf |
Kayan nokta değerinin sınıflandırmasını verir |
fpclassify |
Kayan nokta değerinin sınıflandırmasını verir |
_fpieee_flt |
Kayan nokta özel durumları için bir işleyici ayarlar |
_fpreset |
Kayan nokta ortamını sıfırlar |
frexp , frexpf , frexpl |
Kayan noktalı bir sayının mantisini ve üssünü alır |
_gcvt , gcvt |
Kayan noktalı sayıyı dizeye dönüştürür |
_gcvt_s |
Güvenli sürümü _gcvt |
_get_FMA3_enable , _set_FMA3_enable |
x64'te FMA3 yönergelerini kullanmak için bir bayrak alır veya ayarlar |
hypot , hypotf , hypotl , , _hypot , _hypotf , _hypotl |
Hipotenüs hesaplar |
ilogb , ilogbf , ilogbl |
Base-2 üssü tamsayısını hesaplar |
imaxabs |
Tamsayı türünün mutlak değerini hesaplar |
imaxdiv |
İki tamsayı değerinin bölümünü ve geri kalanını hesaplar |
isfinite , _finite , _finitef |
Bir değerin sonlu olup olmadığını belirler |
isgreater , isgreaterequal , isless , , islessequal , islessgreater , isunordered |
İki kayan nokta değerinin sırasını karşılaştırma |
isinf |
Kayan nokta değerinin sonsuz olup olmadığını belirler |
isnan , _isnan , _isnanf |
NaN için kayan nokta değerini test etme |
isnormal |
Kayan nokta değerinin hem sonlu olup olmadığını hem de altnormal olup olmadığını sınar |
_j0 , _j1 , _jn |
Bessel işlevini hesaplar |
ldexp , ldexpf , ldexpl |
İşlemler x*2n |
lgamma , lgammaf , lgammal |
Gama işlevinin mutlak değerinin doğal logaritması hesaplanır |
llrint , llrintf , llrintl |
Kayan nokta değerini en long long yakın değere yuvarlar |
llround , llroundf , llroundl |
Kayan nokta değerini en long long yakın değere yuvarlar |
log , logf , logl , , log10 , log10f , log10l |
Doğal veya 10 tabanındaki logaritması hesaplar |
log1p , log1pf , log1pl |
1+x'in doğal logaritması hesaplanır |
log2 , log2f , log2l |
2 tabanındaki logaritması hesaplar |
logb , logbf , logbl , _logb , , _logbf |
Kayan nokta değerinin üssünü verir |
lrint , lrintf , lrintl |
Kayan nokta değerini en long yakın değere yuvarlar |
_lrotl , _lrotr |
Tamsayı değerini sola veya sağa döndürür |
lround , lroundf , lroundl |
Kayan nokta değerini en long yakın değere yuvarlar |
_matherr |
Varsayılan matematik hata işleyicisi |
__max |
İki değerin büyük bölümünü döndüren makro |
__min |
İki değerin küçük olanını döndüren makro |
modf , modff , modfl |
Kayan nokta değerini kesirli ve tamsayı bölümlerine böler |
nan , nanf , nanl |
Sessiz bir NaN değeri verir |
nearbyint , nearbyintf , nearbyintl |
Yuvarlatılmış değeri verir |
nextafter , nextafterf , nextafterl , _nextafter , , _nextafterf |
Bir sonraki temsil edilebilir kayan nokta değerini verir |
nexttoward , nexttowardf , nexttowardl |
Bir sonraki temsil edilebilir kayan nokta değerini verir |
pow , powf , powl |
değerini verir x y |
remainder , remainderf , remainderl |
İki kayan nokta değerinin bölümünün geri kalanını hesaplar |
remquo , remquof , remquol |
İki tamsayı değerinin geri kalanını hesaplar |
rint , rintf , rintl |
Kayan nokta değerini yuvarlar |
_rotl , _rotl64 , _rotr , _rotr64 |
Bitleri tamsayı türlerinde döndürür |
round , roundf , roundl |
Kayan nokta değerini yuvarlar |
_scalb , _scalbf |
Bağımsız değişkeni 2'nin gücüne göre ölçeklendirir |
scalbn , scalbnf , scalbnl , , scalbln , scalblnf , scalblnl |
Kayan noktalı bir sayıyı, FLT_RADIX |
_set_controlfp |
Kayan nokta denetim sözcüğünü ayarlar |
_set_SSE2_enable |
SSE2 yönergelerini etkinleştirir veya devre dışı bırakır |
signbit |
Kayan nokta değerinin işaret bitini test etme |
sin , sinf , sinl |
Sinüsü hesaplar |
sinh , sinhf , sinhl |
Hiperbolik sinüsü hesaplar |
sqrt , sqrtf , sqrtl |
Karekök hesaplar |
_status87 , _statusfp , _statusfp2 |
Kayan nokta durum sözcüğünü alır |
strtof , _strtof_l |
Dizeyi bir dizeye dönüştürür float |
strtold , _strtold_l |
Dizeyi bir dizeye dönüştürür long double |
tan , tanf , tanl |
Tanjant hesaplar |
tanh , tanhf , tanhl |
Hiperbolik tanjantını hesaplar |
tgamma , tgammaf , tgammal |
Gama işlevini hesaplar |
trunc , truncf , truncl |
Kesirli bölümü kesirli olarak kesirler |
_wtof , _wtof_l |
Geniş bir dizeyi bir double |
_y0 , _y1 , _yn |
Bessel işlevini hesaplar |
Ayrıca bkz.
Kategoriye göre Evrensel C çalışma zamanı yordamları
Kayan nokta temel elemanları