C matematiksel fonksiyonlar - C mathematical functions

C matematiksel işlemler işlevleri bir grup standart kütüphanesine ait C programlama dilinin temel matematiksel fonksiyonların uygulanması. Tüm işlevler , şu veya bu şekilde kayan noktalı sayıları kullanır . Farklı C standartları, geriye dönük uyumlu olsa da farklı işlev kümeleri sağlar. Bu işlevlerin çoğu , farklı başlıklarda olsa da C++ standart kitaplığında da mevcuttur (C başlıkları da dahildir, ancak yalnızca kullanımdan kaldırılmış bir uyumluluk özelliği olarak).

Fonksiyonlara genel bakış

Matematiksel fonksiyonların çoğu <math.h>( <cmath>C++'da başlık) içinde tanımlanmıştır . Tamsayılar üzerinde işlem fonksiyonları, örneğin abs, labs, divve ldiv, bunun yerine tanımlanır <stdlib.h>başlığında ( <cstdlib>C başlık ++).

Açılar üzerinde çalışan herhangi bir fonksiyon, açı birimi olarak radyan kullanır .

Bu işlevlerin tümü , standardın C89 sürümünde mevcut değildir . Olanlar için, işlevler yalnızca doublekayan nokta bağımsız değişkenleri için türü kabul eder ve aksi takdirde tek duyarlıklı floatdeğerler kullanan kodda pahalı tür dönüşümlerine yol açar . C99'da bu eksiklik, üzerinde çalışan floatve long doubleargümanlar üzerinde çalışan yeni fonksiyon setleri getirilerek giderildi . Bu işlevler sırasıyla fve lekleriyle tanımlanır .

İşlev Tanım
abs
labs
llabs
bir tamsayı değerinin mutlak değerini hesaplar
fabs kayan noktalı bir değerin mutlak değerini hesaplar
div
ldiv
lldiv
tamsayı bölümünün bölümünü ve kalanını hesaplar
fmod kayan noktalı bölme işleminin geri kalanı
remainder Bölünme operasyonunun imzalanan kalanı
remquo bölme işleminin son üç bitinin yanı sıra imzalı kalan
fma kaynaşmış çarpma-ekleme işlemi
fmax iki kayan nokta değerinden daha büyük
fmin iki kayan nokta değerinden daha küçük
fdim iki kayan noktalı değerin pozitif farkı
nan
nanf
nanl
bir NaN (sayı değil) döndürür
üstel
fonksiyonlar
exp döner e belirli bir kuvvete yükseltilecek
exp2 verilen güce yükseltilmiş 2 döndürür
expm1 verilen güce yükseltilmiş e'yi döndürür, eksi bir
log doğal logaritmayı hesaplar (e tabanına)
log2 ikili logaritmayı hesaplar (2 tabanına)
log10 ortak logaritmayı hesaplar (10 tabanına kadar)
log1p 1 artı verilen sayının doğal logaritmasını (e tabanına göre) hesaplar
ilogb sayının üssünü çıkarır
logb sayının üssünü çıkarır
Güç
fonksiyonları
sqrt karekök hesaplar
cbrt kübik kökü hesaplar
hypot verilen iki sayının karelerinin toplamının karekökünü hesaplar
pow bir sayıyı verilen güce yükseltir
trigonometrik
fonksiyonlar
sin sinüs hesaplar
cos kosinüs hesaplar
tan tanjantı hesaplar
asin ark sinüsünü hesaplar
acos ark kosinüsünü hesaplar
atan ark tanjantını hesaplar
atan2 kadranları belirlemek için işaretleri kullanarak ark tanjantını hesaplar
hiperbolik
fonksiyonlar
sinh hiperbolik sinüsü hesaplar
cosh hiperbolik kosinüs hesaplar
tanh hiperbolik tanjantı hesaplar
asinh hiperbolik ark sinüsünü hesaplar
acosh hiperbolik ark kosinüsünü hesaplar
atanh hiperbolik ark tanjantını hesaplar
Hata ve
gama
işlevleri
erf hata fonksiyonunu hesaplar
erfc tamamlayıcı hata fonksiyonunu hesaplar
lgamma gama fonksiyonunun mutlak değerinin doğal logaritmasını hesaplar
tgamma gama fonksiyonunu hesaplar
En yakın
tamsayı
kayan
nokta
işlemleri
ceil verilen değerden daha az olmayan en yakın tamsayıyı döndürür
floor verilen değerden büyük olmayan en yakın tamsayıyı döndürür
trunc verilen değerden büyük olmayan en yakın tamsayıyı döndürür
round
lround
llround
yarım durumlarda sıfırdan uzaklaşarak en yakın tamsayıyı döndürür
nearbyint geçerli yuvarlama modunu kullanarak en yakın tamsayıyı döndürür
rint
lrint
llrint
sonuç farklıysa istisna dışında geçerli yuvarlama modunu kullanarak en yakın tamsayıyı döndürür
Kayan
nokta
işleme
işlevleri
frexp bir sayıyı anlamlı ve 2'nin kuvvetine ayırır
ldexp bir sayıyı bir kuvvete yükseltilmiş 2 ile çarpar
modf bir sayıyı tamsayı ve kesirli parçalara ayırır
scalbn
scalbln
bir sayıyı bir güce yükseltilmiş FLT_RADIX ile çarpar
nextafter
nexttoward
verilen değere doğru sonraki temsil edilebilir kayan nokta değerini döndürür
copysign kayan nokta değerinin işaretini kopyalar
sınıflandırma fpclassify verilen kayan nokta değerini sınıflandırır
isfinite argümanın sonlu bir değeri olup olmadığını kontrol eder
isinf argümanın sonsuz olup olmadığını kontrol eder
isnan argümanın NaN olup olmadığını kontrol eder
isnormal argümanın normal olup olmadığını kontrol eder
signbit argümanın işaretinin negatif olup olmadığını kontrol eder

Kayan nokta ortamı

C99 , kayan nokta ortamının ayrıntılı denetimi için çeşitli işlevler ve türler ekler. Bu işlevler, kayan nokta hesaplamalarını etkileyen çeşitli ayarları kontrol etmek için kullanılabilir, örneğin, yuvarlama modu, istisnaların hangi koşullarda meydana geldiği, sayılar sıfıra indirildiğinde, vb. Kayan nokta ortam işlevleri ve türleri tanımlanır. içerisinde <fenv.h>başlığın ( <cfenv>de C ++ ).

İşlev Tanım
feclearexcept istisnaları temizler ( C99 )
fegetenv geçerli kayan nokta ortamını depolar ( C99 )
fegetexceptflag mevcut durum bayraklarını saklar ( C99 )
fegetround geçerli yuvarlama yönünü alır ( C99 )
feholdexcept geçerli kayan nokta ortamını kaydeder ve tüm istisnaları temizler ( C99 )
feraiseexcept kayan nokta istisnası oluşturur ( C99 )
fesetenv geçerli kayan nokta ortamını ayarlar ( C99 )
fesetexceptflag mevcut durum bayraklarını ayarlar ( C99 )
fesetround geçerli yuvarlama yönünü ayarlar ( C99 )
fetestexcept belirli istisnaların ortaya çıkıp çıkmadığını test eder ( C99 )
feupdateenv kayan nokta ortamını geri yükler, ancak mevcut istisnaları korur ( C99 )

Karışık sayılar

C99 , karmaşık sayılar için destek sağlayan yeni bir _Complexanahtar sözcük (ve complexkolaylık makrosu) ekler . Herhangi bir kayan nokta türü ile değiştirilebilir complexve ardından bir çift kayan noktalı sayı olarak tanımlanır. C99 ve C++'ın karmaşık sayıları kod uyumlu bir şekilde uygulamadığını unutmayın - ikincisi bunun yerine sınıfı sağlar . std::complex

Karmaşık sayılar üzerindeki tüm işlemler <complex.h>başlıkta tanımlanır . Gerçek değerli fonksiyonlarda olduğu gibi, bir fveya lsoneki , fonksiyonun float complexveya long double complexvaryantını belirtir .

İşlev Tanım
Temel
işlemler
cabs mutlak değeri hesaplar ( C99 )
carg karmaşık bir sayının argümanını hesaplar ( C99 )
cimag karmaşık sayının sanal kısmını hesaplar ( C99 )
creal karmaşık bir sayının gerçek kısmını hesaplar ( C99 )
conj karmaşık eşleniği hesaplar ( C99 )
cproj Riemann küresine karmaşık projeksiyonu hesaplar ( C99 )
üs alma
işlemleri
cexp karmaşık üstel hesaplar ( C99 )
clog karmaşık logaritmayı hesaplar ( C99 )
csqrt karmaşık karekök hesaplar ( C99 )
cpow karmaşık gücü hesaplar ( C99 )
trigonometrik
işlemler
csin karmaşık sinüsü hesaplar ( C99 )
ccos karmaşık kosinüs hesaplar ( C99 )
ctan karmaşık tanjantı hesaplar ( C99 )
casin karmaşık ark sinüsünü hesaplar ( C99 )
cacos karmaşık ark kosinüsünü hesaplar ( C99 )
catan karmaşık ark tanjantını hesaplar ( C99 )
hiperbolik
işlemler
csinh karmaşık hiperbolik sinüsü hesaplar ( C99 )
ccosh karmaşık hiperbolik kosinüs hesaplar ( C99 )
ctanh karmaşık hiperbolik tanjantı hesaplar ( C99 )
casinh karmaşık hiperbolik ark sinüsünü hesaplar ( C99 )
cacosh karmaşık hiperbolik ark kosinüsünü hesaplar ( C99 )
catanh karmaşık hiperbolik ark tanjantını hesaplar ( C99 )

Birkaç daha karmaşık işlev "C99'da gelecekte kullanılmak üzere ayrılmıştır". Uygulamalar, standart kitaplığın parçası olmayan açık kaynaklı projeler tarafından sağlanır.

İşlev Tanım
Hata işlevleri cerf karmaşık hata fonksiyonunu hesaplar ( C99 )
cerfc karmaşık tamamlayıcı hata fonksiyonunu hesaplar ( C99 )

Tür-genel işlevler

Başlık <tgmath.h>, <math.h>ve içinde tanımlanan her matematiksel işlev için bir tür genel makro tanımlar <complex.h>. Bu , matematiksel işlevlerin aşırı yüklenmesi için sınırlı bir destek ekler : aynı işlev adı farklı türde parametrelerle kullanılabilir; gerçek işlev, parametre türlerine göre derleme zamanında seçilecektir.

Hem gerçek hem de karmaşık sayılar için tanımlanan bir işleve karşılık gelen her tür genel makro, toplam 6 farklı işlevi kapsüller: float, doubleve long double, ve bunların complextürevleri. Yalnızca gerçek sayılar için tanımlanan bir işleve karşılık gelen tür-genel makrolar, toplam 3 farklı işlevi kapsar: float, doubleve long doubleişlevin türevleri.

C++ dili, işlev aşırı yüklemesi için yerel destek içerir ve bu nedenle, <tgmath.h>bir uyumluluk özelliği olarak bile başlığı sağlamaz .

Rastgele sayı üretimi

Başlık <stdlib.h>( <cstdlib>C++'da), istatistiksel olarak rastgele sayı üretimi için kullanılabilecek birkaç işlevi tanımlar.

İşlev Tanım
rand 0 ile RAND_MAX, dahil arasında bir sözde rasgele sayı üretir .
srand sözde rasgele sayı üretecini başlatır
arc4random UINT32_MAXgenellikle daha iyi bir algoritma kullanarak, 0 ile arasında bir sözde rasgele sayı üretir.rand
arc4random_uniform 0 ile maksimum değer arasında sözde rasgele bir sayı üretir.
arc4random_buf arabelleği sözde rastgele bir bit akışıyla doldurun.
arc4random_stir bir sözde rasgele sayı üreteci başlatır .

arc4randomRasgele sayı fonksiyonlarının aile POSIX standardında tanımlanan değildir, ancak bazı ortak bulunan libcuygulamaları. Bu bir sızdırılmış versiyonunun Keystream jeneratör ifade etmek için kullanılır RC4 şifre (dolayısıyla " Bir lleged RC4 "), ancak genellikle gibi diğer şifrelerin farklı algoritmalar, ChaCha20 , aynı adı kullanarak beri uygulanmaktadır.

Rastgelelik kalitesi randgenellikle istatistiksel olarak rastgele kabul edilemeyecek kadar zayıftır ve açık tohumlama gerektirir. Genellikle mümkün olduğunda arc4randomyerine kullanılması tavsiye edilir rand. Bazı C kitaplıkları dahili olarak randkullanarak uygular arc4random_uniform.

Uygulamalar

Linux ve BSD gibi POSIX sistemleri altında , matematiksel işlevler (içinde bildirildiği gibi ) matematik kitaplığında ayrı olarak paketlenir . Bu nedenle, bu işlevlerden herhangi biri kullanılıyorsa, bağlayıcıya yönerge verilmelidir . Aşağıdakiler dahil çeşitli uygulamalar vardır : <math.h> libm-lmlibm

Bir ad altında olması gerekmeyen uygulamalar libmşunları içerir:

Ayrıca bakınız

Referanslar

Dış bağlantılar