C matematik funktsiyalari - C mathematical functions

C matematik operatsiyalar funktsiyalar guruhidir standart kutubxona ning C dasturlash tili asosiy matematik funktsiyalarni amalga oshirish.[1][2] Barcha funktsiyalardan foydalaniladi suzuvchi nuqta raqamlarni u yoki bu tarzda. Turli xil C standartlari har xil, orqaga qarab mos keladigan funktsiyalar to'plamini ta'minlaydi. Ushbu funktsiyalarning aksariyati C ++ standart kutubxonasi, har xil sarlavhalarda bo'lsa ham (C sarlavhalari ham kiritilgan, ammo eskirgan muvofiqlik xususiyati sifatida).

Funktsiyalarga umumiy nuqtai

Matematik funktsiyalarning aksariyati <math.h> (<cmath> C ++ da sarlavha). Kabi butun sonlarda ishlaydigan funktsiyalar abs, laboratoriyalar, divva ldiv, o'rniga belgilanadi <stdlib.h> sarlavha (<cstdlib> C ++ da sarlavha).

Burchaklar ustida ishlaydigan har qanday funktsiyalardan foydalaniladi radianlar burchak birligi sifatida.[1]

Ushbu funktsiyalarning hammasi ham mavjud emas C89 standart versiyasi. Ular uchun funktsiyalar faqat turni qabul qiladi ikki baravar suzuvchi nuqta argumentlari uchun, aks holda bitta aniqlik ishlatilgan koddagi qimmat turdagi konversiyalarga olib keladi suzmoq qiymatlar. C99-da, ushbu kamchilik ishlaydigan ishlaydigan yangi funktsiyalar to'plamini joriy qilish orqali bartaraf etildi suzmoq va uzun er-xotin dalillar. Ushbu funktsiyalar tomonidan belgilanadi f va l mos ravishda qo'shimchalar.[3]

FunktsiyaTavsif
abs
laboratoriyalar
plitalar
hisoblash mutlaq qiymat butun sonning qiymati
fabssuzuvchi nuqta qiymatining mutlaq qiymatini hisoblab chiqadi
div
ldiv
lldiv
miqdorini va qolgan qismini hisoblab chiqadi butun bo'linish
fmodsuzuvchi nuqta bo'linish operatsiyasining qolgan qismi
qoldiqbo'linish operatsiyasining qolgan qismi imzolangan
remquoimzolangan qoldiq, shuningdek bo'linish operatsiyasining so'nggi uchta qismi
fmabirlashtirilgan ko'paytirish-qo'shish operatsiya
fmaxikkita suzuvchi qiymatdan kattaroq
fminsuzuvchi nuqta qiymatlaridan kichikroq
fdimsuzuvchi nuqta qiymatlarining ijobiy farqi
nan
nanf
nanl
qaytaradi a raqam emas (NaN)
Eksponent
funktsiyalari
tugatishqaytadi e berilgan kuchga ko'tarildi
exp2berilgan quvvatga ko'tarilgan 2 ni qaytaradi
expm1berilgan quvvatga ko'tarilgan qaytaradi, minus bitta
jurnalhisoblash tabiiy logaritma (e asosiga)
log2hisoblash ikkilik logarifma (2-asosga)
log10hisoblash umumiy logaritma (10-asosga)
log1p1 berilgan sonni qo'shib tabiiy logarifmni (e asosiga) hisoblab chiqadi
ilogbraqamning eksponentini chiqaradi
logbraqamning ko'rsatkichini ajratib oladi
Quvvat
funktsiyalari
kvhisoblash kvadrat ildiz
cbrthisoblash kubik ildiz
gipotezahisoblash berilgan ikkita sonning kvadratlari yig'indisining kvadrat ildizi
kuchraqamni berilgan kuchga oshiradi[4]
Trigonometrik
funktsiyalari
gunohhisoblash sinus
coshisoblash kosinus
sarg'ishhisoblash teginish
asinhisoblash yoy sinusi
akoshisoblash yoy kosinusi
atanhisoblash boshq teginish
atan2hisoblash yoy tegan, kvadrantlarni aniqlash uchun belgilar yordamida
Giperbolik
funktsiyalari
sinxgiperbolik sinusni hisoblab chiqadi
xushchaqchaqgiperbolik kosinusni hisoblab chiqadi
tanhgiperbolik tangensni hisoblab chiqadi
asinhgiperbolik yoy sinusini hisoblab chiqadi
akoshgiperbolik yoy kosinusini hisoblab chiqadi
atanxgiperbolik kamon teginasini hisoblab chiqadi
Xato va
gamma
funktsiyalari
erfhisoblash xato funktsiyasi
erfchisoblash qo'shimcha xato funktsiyasi
lgammaning mutlaq qiymatining tabiiy logarifmini hisoblab chiqadi gamma funktsiyasi
tgammagamma funktsiyasini hisoblab chiqadi
Eng yaqin
tamsayı
suzuvchi
nuqta
operatsiyalar
shiftberilgan qiymatdan kam bo'lmagan eng yaqin butun sonni qaytaradi
zaminberilgan qiymatdan katta bo'lmagan eng yaqin butun sonni qaytaradi
trunkkattaligi berilgan qiymatdan katta bo'lmagan eng yaqin butun sonni qaytaradi
dumaloq
zamin
llround
yarim holatda noldan yaxlitlash uchun eng yaqin butun sonni qaytaradi
yaqindajoriy yaxlitlash rejimi yordamida eng yaqin butun sonni qaytaradi
zarb
lrint
lrrint
natija farq qiladigan bo'lsa, istisno bilan joriy yaxlitlash rejimidan foydalangan holda eng yaqin butun sonni qaytaradi
Suzuvchi-
nuqta
manipulyatsiya
funktsiyalari
frexpsonni ahamiyatli va kuchga ajratadi
ldexpquvvatni ko'targan sonni 2 ga ko'paytiradi
modfsonni butun va kesirli qismlarga ajratadi
skalbn
skalbln
raqamni kuchga ko'tarilgan FLT_RADIX ga ko'paytiradi
keyingi
keyingi tomonga
suzuvchi nuqta qiymatini berilgan qiymat tomon qaytaradi
nusxa ko'chirishsuzuvchi nuqta qiymatining belgisini ko'chiradi
Tasnififpclassifyberilgan suzuvchi qiymatni tasniflaydi
cheksizberilgan son cheklangan qiymatga ega ekanligini tekshiradi
isinfberilgan son cheksizligini tekshiradi
isnanberilgan sonning NaN ekanligini tekshiradi
g'ayritabiiyberilgan raqam normal yoki yo'qligini tekshiradi
signbitberilgan raqam manfiy ekanligini tekshiradi

Suzuvchi muhit

C99 suzuvchi nuqta muhitini nozik boshqarish uchun bir nechta funktsiyalar va turlarni qo'shadi.[3] Ushbu funktsiyalar suzuvchi nuqta hisob-kitoblariga ta'sir qiladigan turli xil sozlamalarni boshqarish uchun ishlatilishi mumkin, masalan, yaxlitlash rejimi, qanday sharoitda istisnolar yuz beradi, raqamlar nolga tenglashtirilganda va hokazo. Suzuvchi muhitning funktsiyalari va turlari aniqlanadi. yilda <fenv.h> sarlavha (<cfenv> yilda C ++ ).

FunktsiyaTavsif
feclearexceptistisnolarni tozalaydi (C99 )
fegetenvmavjud suzuvchi nuqta muhitini saqlaydi (C99 )
fegetexceptflagjoriy holat bayroqlarini saqlaydi (C99 )
gulzorjoriy yaxlitlash yo'nalishini oladi (C99 )
feholdexcept tashqarimavjud suzuvchi nuqtani saqlaydi va barcha istisnolarni tozalaydi (C99 )
feraiseexcept tashqarisuzuvchi nuqta istisnosini ko'taradi (C99 )
fesetenvsuzuvchi nuqta muhitini o'rnatadi (C99 )
fesetexceptflagjoriy holat bayroqlarini o'rnatadi (C99 )
Fesetroundjoriy yaxlitlash yo'nalishini belgilaydi (C99 )
homiladan tashqariba'zi bir istisnolar ko'tarilganligini tekshiradi (C99 )
feupdateenvsuzuvchi nuqta muhitini tiklaydi, ammo hozirgi istisnolarni saqlaydi (C99 )

Murakkab raqamlar

C99 yangisini qo'shadi _Kompleks kalit so'z (va murakkab murakkab raqamlarni qo'llab-quvvatlovchi qulaylik makrosi). Har qanday suzuvchi nuqta turini o'zgartirish mumkin murakkab, va keyin suzuvchi nuqta sonlar jufti sifatida aniqlanadi. E'tibor bering, C99 va C ++ murakkab raqamlarni kodga mos keladigan tarzda amalga oshirmaydi - ikkinchisi o'rniga sinfni taqdim etadi std::murakkab.

Kompleks sonlar bo'yicha barcha amallar <complex.h> sarlavha. Haqiqiy qiymatga ega funktsiyalarda bo'lgani kabi f yoki l qo'shimchasi suzuvchi kompleks yoki uzun er-xotin kompleks funktsiyaning varianti.

FunktsiyaTavsif
Asosiy
operatsiyalar
kabinalarhisoblash mutlaq qiymat (C99 )
yukhisoblash murakkab sonning argumenti (C99 )
cimaghisoblash xayoliy qism murakkab son (C99 )
krealhisoblash haqiqiy qism murakkab son (C99 )
qo'shmahisoblash murakkab konjugat (C99 )
cprojga murakkab proektsiyani hisoblab chiqadi Riman shar (C99 )
Ko'rsatkich
operatsiyalar
cexpmurakkab hisoblaydi eksponent (C99 )
tiqilib qolmoqmurakkab hisoblaydi logaritma (C99 )
csqrtmurakkab hisoblaydi kvadrat ildiz (C99 )
qarag'aymurakkab hisoblaydi kuch (C99 )
Trigonometrik
operatsiyalar
csinmurakkab hisoblaydi sinus (C99 )
ccosmurakkab hisoblaydi kosinus (C99 )
ctanmurakkab hisoblaydi teginish (C99 )
kasinmurakkab hisoblaydi yoy sinusi (C99 )
kakoslarmurakkab hisoblaydi yoy kosinusi (C99 )
katanmurakkab hisoblaydi boshq teginish (C99 )
Giperbolik
operatsiyalar
csinhmurakkab hisoblaydi giperbolik sinus (C99 )
ccoshmurakkab hisoblaydi giperbolik kosinus (C99 )
ctanhmurakkab hisoblaydi giperbolik tangens (C99 )
kasinmurakkab hisoblaydi yoyning giperbolik sinusi (C99 )
kakoshmurakkab hisoblaydi giperbolik yoy kosinusi (C99 )
katanhmurakkab hisoblaydi giperbolik kamon teginasi (C99 )

Yana bir nechta murakkab funktsiyalar "kelajakda C99-da foydalanish uchun ajratilgan".[5] Amalga oshirish standart kutubxonaga kirmaydigan ochiq manbali loyihalar bilan ta'minlanadi.

FunktsiyaTavsif
Xato funktsiyalarikerfkompleksni hisoblab chiqadi xato funktsiyasi (C99 )
kerfckompleksni to'ldiruvchini hisoblab chiqadi xato funktsiyasi (C99 )

Umumiy funktsiyalar

Sarlavha <tgmath.h> da belgilangan har bir matematik funktsiya uchun tipik umumiy so'lni belgilaydi <math.h> va <complex.h>. Bu uchun cheklangan yordam qo'shiladi funktsiyani haddan tashqari yuklash matematik funktsiyalar: bir xil funktsiya nomidan har xil turdagi parametrlar bilan foydalanish mumkin; parametrlar turiga ko'ra kompilyatsiya vaqtida haqiqiy funktsiya tanlanadi.

Haqiqiy va murakkab sonlar uchun aniqlangan funktsiyaga mos keladigan har bir turdagi umumiy makros jami 6 xil funktsiyani o'z ichiga oladi: suzmoq, ikki baravar va uzun er-xotinva ularning murakkab variantlar. Faqatgina haqiqiy sonlar uchun aniqlangan funktsiyaga mos keladigan tipik makroslar jami 3 xil funktsiyani o'z ichiga oladi: suzmoq, ikki baravar va uzun er-xotin funktsiya variantlari.

C ++ tili funktsiyalarni haddan tashqari yuklash uchun mahalliy qo'llab-quvvatlashni o'z ichiga oladi va shu bilan ta'minlamaydi <tgmath.h> moslik xususiyati sifatida ham sarlavha.

Tasodifiy son yaratish

Sarlavha <stdlib.h> (<cstdlib> C ++ da) raqamlarni statistik ravishda yaratish uchun ishlatilishi mumkin bo'lgan bir nechta funktsiyalarni belgilaydi.[6]

FunktsiyaTavsif
rand0 va orasida psevdo-tasodifiy son hosil qiladi RAND_MAX, shu jumladan.
srandboshlang'ich a psevdo-tasodifiy sonlar generatori
arc4random0 va orasida psevdo-tasodifiy son hosil qiladi UINT32_MAX, odatda nisbatan yaxshi algoritmdan foydalaniladi rand
arc4random_uniform0 va maksimal qiymat orasida yolg'on tasodifiy son hosil qiladi.
arc4random_bufbuferni psevdo-tasodifiy bit oqim bilan to'ldiring.
arc4random_stirboshlang'ich a psevdo-tasodifiy sonlar generatori.

The arc4random tasodifiy sonlar funktsiyalari oilasi POSIX standartida aniqlanmagan, ammo ba'zi bir umumiy funktsiyalarda mavjud libc amalga oshirish. Bu sızdırılmış versiyasining klaviatura generatoriga murojaat qilish uchun ishlatilgan RC4 shifr (shu sababli "ayalang'och RC4"), lekin boshqa algoritmlar, odatda boshqa shunga o'xshash shifrlardan ChaCha20, xuddi shu nomdan beri amalga oshirilgan.

Dan tasodifiylik sifati rand odatda statistik tasodifiy deb hisoblash uchun juda zaifdir va bu aniq urug'larni talab qiladi. Odatda foydalanish tavsiya etiladi arc4random o'rniga rand iloji bo'lsa. Ba'zi bir C kutubxonalari amalga oshiradi rand foydalanish arc4random_uniform ichki.

Amaliyotlar

Ostida POSIX kabi tizimlar Linux va BSD, matematik funktsiyalar (da e'lon qilinganidek) <math.h>) matematik kutubxonada alohida to'plangan libm. Shuning uchun, agar ushbu funktsiyalardan birortasi ishlatilsa, bog'lovchiga ko'rsatma berilishi kerak -lm. Turli xil libm amalga oshirish, shu jumladan:

Amalga oshirish shart emas libm quyidagilarni o'z ichiga oladi:

Shuningdek qarang

Adabiyotlar

  1. ^ a b ISO / IEC 9899: 1999 spetsifikatsiyasi (PDF). p. 212, § 7.12.
  2. ^ Prata, Stiven (2004). C astar ortiqcha. Sams Publishing. Qo'shimcha B, V bo'lim: C99 qo'shimchalari bilan standart ANSI C kutubxonasi. ISBN  0-672-32696-5.
  3. ^ a b Prata, Stiven (2004). C astar ortiqcha. Sams Publishing. Qo'shimcha B, VIII bo'lim: C99 Raqamli hisoblash yaxshilanishlari. ISBN  0-672-32696-5.
  4. ^ Notatsion ravishda, pow (dan foydalanish) qulay ko'rinishi mumkin (x, 2) yoki pow (x, 3) kvadratchalar yoki kublarni hisoblash uchun. Biroq, bu vaqtni talab qiladigan kodlarda tavsiya etilmaydi. Amalga oshiriladigan dastur ushbu ishlarga alohida e'tibor bermasa, x*x yoki x*x*x juda tezroq bajariladi. Shuningdek, sqrt (x) va cbrt (x) ga nisbatan afzalroq bo'lishi kerak (x, .5) yoki pow (x,1./3).
  5. ^ man cerf (3), man cerfc (3), masalan, qarang. https://linux.die.net/man/3/cerf.
  6. ^ "GNU C kutubxonasi - ISO tasodifiy". Olingan 18 iyul 2018.
  7. ^ Kordes, Piter. "intel - Clangning" _mm256_pow_ps "ning ichki xususiyati qayerda?". Stack overflow.

Tashqi havolalar