C matematiksel fonksiyonlar - C mathematical functions
C standart kitaplığı |
---|
Genel başlıklar |
Çeşitli başlıklar |
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
, div
ve 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 double
kayan nokta bağımsız değişkenleri için türü kabul eder ve aksi takdirde tek duyarlıklı float
değerler kullanan kodda pahalı tür dönüşümlerine yol açar . C99'da bu eksiklik, üzerinde çalışan float
ve long double
argümanlar üzerinde çalışan yeni fonksiyon setleri getirilerek giderildi . Bu işlevler sırasıyla f
ve l
ekleriyle 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 _Complex
anahtar sözcük (ve complex
kolaylık makrosu) ekler . Herhangi bir kayan nokta türü ile değiştirilebilir complex
ve 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 f
veya l
soneki , fonksiyonun float complex
veya long double complex
varyantı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 ) | |
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
, double
ve long double
, ve bunların complex
tü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
, double
ve long double
iş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_MAX genellikle 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 . |
arc4random
Rasgele sayı fonksiyonlarının aile POSIX standardında tanımlanan değildir, ancak bazı ortak bulunan libc
uygulamaları. 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 rand
genellikle istatistiksel olarak rastgele kabul edilemeyecek kadar zayıftır ve açık tohumlama gerektirir. Genellikle mümkün olduğunda arc4random
yerine kullanılması tavsiye edilir rand
. Bazı C kitaplıkları dahili olarak rand
kullanarak 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
-lm
libm
- GNU C kütüphanesi 'ın libm
- AMD 'nin libm
- Red Hat 'in libm
- Güneşin 'ın fdlibm için temel olarak kullanıldı, FreeBSD ' nin msun ve OpenBSD 'ın libm , sırayla temelini oluşturuyordu her ikisi de Julia ' nın OpenLibm
- musl 's libm , BSD kütüphanelerine ve ARM gibi diğer projelere dayalıdır.
- Arénaire projesinin CRlibm'i ( doğru yuvarlatılmış libm) ve onun halefi MetaLibm . Resmi olarak kanıtlanmış yaklaşımları otomatik olarak oluşturmak için Remez algoritmasını kullanır .
Bir ad altında olması gerekmeyen uygulamalar libm
şunları içerir:
- ARM 'nin optimize matematik rutinleri
-
GCE-Math , C++ için yazılmış C/C++ matematik işlevlerinin bir sürümüdür
constexpr
(derleme zamanı hesaplaması) - SIMD (vektörlü) matematik kitaplıkları arasında SLEEF , Yeppp! , ve Agner Fog'un VCL'si ve ayrıca SVML ve DirectXMath gibi birkaç kapalı kaynaklı olanlar.
Ayrıca bakınız
Referanslar
Dış bağlantılar
- Tek UNIX Spesifikasyonu , Açık Gruptan Sayı 7 : matematiksel bildirimler – Temel Tanımlar Referansı,
- Matematik fonksiyonları için C referansı