Funkcje matematyczne C - C mathematical functions

C operacje matematyczne są grupą funkcji w bibliotece standardowej w języku programowania C realizacji podstawowych funkcji matematycznych. Wszystkie funkcje używają liczb zmiennoprzecinkowych w taki czy inny sposób. Różne standardy C zapewniają różne, aczkolwiek kompatybilne wstecz, zestawy funkcji. Większość z tych funkcji jest również dostępna w standardowej bibliotece C++ , chociaż w różnych nagłówkach (nagłówki C są również zawarte, ale tylko jako przestarzała funkcja kompatybilności).

Przegląd funkcji

Większość funkcji matematycznych jest zdefiniowana w <math.h>( <cmath>nagłówku w C++). Funkcje, które działają na liczbach całkowitych, takie jak abs, labs, divi ldiv, są zamiast tego zdefiniowane w <stdlib.h>nagłówku ( <cstdlib>nagłówek w C++).

Wszelkie funkcje operujące na kątach używają radianów jako jednostki kąta.

Nie wszystkie z tych funkcji są dostępne w wersji standardu C89 . W przypadku tych, które są, funkcje akceptują tylko typ doubledla argumentów zmiennoprzecinkowych, co prowadzi do kosztownych konwersji typów w kodzie, który w przeciwnym razie używał floatwartości o pojedynczej precyzji . W C99 to niedociągnięcie zostało naprawione przez wprowadzenie nowych zestawów funkcji, które działają floati long doubleargumentów. Funkcje te są odpowiednio identyfikowane przez fi lprzyrostki.

Funkcjonować Opis
abs
labs
llabs
oblicza wartość bezwzględną liczby całkowitej
fabs oblicza wartość bezwzględną wartości zmiennoprzecinkowej
div
ldiv
lldiv
oblicza iloraz i resztę z dzielenia liczb całkowitych
fmod pozostała część operacji dzielenia zmiennoprzecinkowego
remainder podpisana pozostała część operacji podziału
remquo podpisana reszta oraz trzy ostatnie bity operacji dzielenia
fma skondensowana operacja mnożenia i dodawania
fmax większa z dwóch wartości zmiennoprzecinkowych
fmin mniejsza z dwóch wartości zmiennoprzecinkowych
fdim dodatnia różnica dwóch wartości zmiennoprzecinkowych
nan
nanf
nanl
zwraca NaN (nie-liczbę)

Funkcje wykładnicze
exp zwraca e podniesione do danej potęgi
exp2 zwraca 2 podniesione do podanej potęgi
expm1 zwraca e podniesione do danej potęgi, minus jeden
log oblicza logarytm naturalny (o podstawie e)
log2 oblicza logarytm binarny (o podstawie 2)
log10 oblicza logarytm pospolity (o podstawie 10)
log1p oblicza logarytm naturalny (o podstawie e) z 1 plus podana liczba
ilogb wyodrębnia wykładnik liczby
logb wyodrębnia wykładnik liczby

Funkcje zasilania
sqrt oblicza pierwiastek kwadratowy
cbrt oblicza pierwiastek sześcienny
hypot oblicza pierwiastek kwadratowy z sumy kwadratów dwóch podanych liczb
pow podnosi liczbę do podanej potęgi
trygonometryczne
funkcje
sin oblicza sinus
cos oblicza cosinus
tan oblicza styczną
asin oblicza arcus sinus
acos oblicza arcus cosinus
atan oblicza arcus tangens
atan2 oblicza arcus tangens, używając znaków do wyznaczenia ćwiartek

Funkcje hiperboliczne
sinh oblicza sinus hiperboliczny
cosh oblicza cosinus hiperboliczny
tanh oblicza tangens hiperboliczny
asinh oblicza arcus sinus hiperboliczny
acosh oblicza arcus cosinus hiperboliczny
atanh oblicza łuk hiperboliczny tangens
Funkcje błędu i
gamma
erf oblicza funkcję błędu
erfc oblicza komplementarną funkcję błędu
lgamma oblicza logarytm naturalny wartości bezwzględnej funkcji gamma
tgamma oblicza funkcję gamma
Najbliższe
całkowite
o zmiennym
punktowe
operacje
ceil zwraca najbliższą liczbę całkowitą nie mniejszą niż podana wartość
floor zwraca najbliższą liczbę całkowitą nie większą niż podana wartość
trunc zwraca najbliższą liczbę całkowitą nie większą niż podana wartość
round
lround
llround
zwraca najbliższą liczbę całkowitą, zaokrąglając od zera w przypadkach połowicznych
nearbyint zwraca najbliższą liczbę całkowitą przy użyciu bieżącego trybu zaokrąglania
rint
lrint
llrint
zwraca najbliższą liczbę całkowitą przy użyciu bieżącego trybu zaokrąglania, z wyjątkiem sytuacji, gdy wynik jest inny
O zmiennym
punkt
manipulacji
funkcje
frexp rozkłada liczbę na znaczące i potęgę 2
ldexp mnoży liczbę przez 2 podniesioną do potęgi
modf rozkłada liczbę na części całkowite i ułamkowe
scalbn
scalbln
mnoży liczbę przez FLT_RADIX podniesioną do potęgi
nextafter
nexttoward
zwraca następną reprezentowalną wartość zmiennoprzecinkową w kierunku podanej wartości
copysign kopiuje znak wartości zmiennoprzecinkowej
Klasyfikacja fpclassify kategoryzuje daną wartość zmiennoprzecinkową
isfinite sprawdza, czy argument ma skończoną wartość
isinf sprawdza, czy argument jest nieskończony
isnan sprawdza, czy argumentem jest NaN
isnormal sprawdza, czy argument jest normalny
signbit sprawdza, czy znak argumentu jest ujemny

Środowisko zmiennoprzecinkowe

C99 dodaje kilka funkcji i typów do precyzyjnej kontroli środowiska zmiennoprzecinkowego. Funkcje te mogą być używane do kontrolowania różnych ustawień, które mają wpływ na obliczenia zmiennoprzecinkowe, na przykład tryb zaokrąglania, na jakich warunkach występują wyjątki, gdy liczby są wyrównywane do zera itp. Funkcje i typy środowiska zmiennoprzecinkowego są zdefiniowane w <fenv.h>nagłówku ( <cfenv>w C++ ).

Funkcjonować Opis
feclearexcept usuwa wyjątki ( C99 )
fegetenv przechowuje bieżące środowisko zmiennoprzecinkowe ( C99 )
fegetexceptflag przechowuje aktualne flagi stanu ( C99 )
fegetround pobiera bieżący kierunek zaokrąglania ( C99 )
feholdexcept zapisuje bieżące środowisko zmiennoprzecinkowe i usuwa wszystkie wyjątki ( C99 )
feraiseexcept zgłasza wyjątek zmiennoprzecinkowy ( C99 )
fesetenv ustawia bieżące środowisko zmiennoprzecinkowe ( C99 )
fesetexceptflag ustawia flagi aktualnego stanu ( C99 )
fesetround ustawia aktualny kierunek zaokrąglania ( C99 )
fetestexcept testuje, czy zgłoszono pewne wyjątki ( C99 )
feupdateenv przywraca środowisko zmiennoprzecinkowe, ale zachowuje bieżące wyjątki ( C99 )

Liczby zespolone

C99 dodaje nowe _Complexsłowo kluczowe (i complexmakro wygody), które zapewnia obsługę liczb zespolonych. Dowolny typ zmiennoprzecinkowy można modyfikować za pomocą complex, a następnie jest definiowany jako para liczb zmiennoprzecinkowych. Zwróć uwagę, że C99 i C++ nie implementują liczb zespolonych w sposób zgodny z kodem — ten drugi zamiast tego udostępnia klasę . std::complex

Wszystkie operacje na liczbach zespolonych są zdefiniowane w <complex.h>nagłówku. Podobnie jak w przypadku funkcji o wartościach rzeczywistych, przyrostek flub loznacza wariant float complexlub long double complexwariant funkcji.

Funkcjonować Opis
Podstawowe
operacje
cabs oblicza wartość bezwzględną ( C99 )
carg oblicza argument liczby zespolonej ( C99 )
cimag oblicza część urojoną liczby zespolonej ( C99 )
creal oblicza część rzeczywistą liczby zespolonej ( C99 )
conj oblicza sprzężenie zespolone ( C99 )
cproj oblicza odwzorowanie złożone na sferę Riemanna ( C99 )

Operacje potęgowania
cexp oblicza złożone wykładnicze ( C99 )
clog oblicza logarytm zespolony ( C99 )
csqrt oblicza złożony pierwiastek kwadratowy ( C99 )
cpow oblicza moc zespoloną ( C99 )

Operacje trygonometryczne
csin oblicza sinus zespolony ( C99 )
ccos oblicza zespolony cosinus ( C99 )
ctan oblicza styczną zespoloną ( C99 )
casin oblicza złożony łuk sinusoidalny ( C99 )
cacos oblicza zespolony arcus cosinus ( C99 )
catan oblicza złożony łuk tangens ( C99 )

Operacje hiperboliczne
csinh oblicza złożony sinus hiperboliczny ( C99 )
ccosh oblicza złożony cosinus hiperboliczny ( C99 )
ctanh oblicza złożony tangens hiperboliczny ( C99 )
casinh oblicza złożony łuk hiperboliczny arcus sinus ( C99 )
cacosh oblicza złożony arcus cosinus hiperboliczny ( C99 )
catanh oblicza złożony łuk hiperboliczny tangens ( C99 )

Kilka bardziej złożonych funkcji jest „zarezerwowanych do przyszłego użytku w C99”. Implementacje są dostarczane przez projekty typu open source, które nie są częścią standardowej biblioteki.

Funkcjonować Opis
Funkcje błędów cerf oblicza złożoną funkcję błędu ( C99 )
cerfc oblicza zespoloną komplementarną funkcję błędu ( C99 )

Funkcje ogólne typu

Nagłówek <tgmath.h>definiuje ogólne makro typu dla każdej funkcji matematycznej zdefiniowanej w <math.h>i <complex.h>. Dodaje to ograniczoną obsługę przeciążania funkcji funkcji matematycznych: ta sama nazwa funkcji może być używana z różnymi typami parametrów; rzeczywista funkcja zostanie wybrana w czasie kompilacji zgodnie z typami parametrów.

Każde makro ogólne, które odpowiada funkcji zdefiniowanej zarówno dla liczb rzeczywistych, jak i zespolonych, zawiera w sumie 6 różnych funkcji: float, doublei long doublei ich complexwariantów. Makra Typ-generic odpowiadające funkcji, która jest zdefiniowana tylko dla liczb rzeczywistych obudowuje w sumie 3 różnych funkcji: float, doublei long doublewarianty funkcji.

Język C++ zawiera natywną obsługę przeciążania funkcji, a zatem nie zapewnia <tgmath.h>nagłówka nawet jako funkcji zgodności.

Generowanie liczb losowych

Nagłówek <stdlib.h>( <cstdlib>w C++) definiuje kilka funkcji, których można użyć do generowania liczb losowych statystycznie.

Funkcjonować Opis
rand generuje liczbę pseudolosową z zakresu od 0 do RAND_MAX.
srand inicjuje generator liczb pseudolosowych
arc4random generuje liczbę pseudolosową z zakresu od 0 do UINT32_MAX, zwykle przy użyciu lepszego algorytmu niżrand
arc4random_uniform generuje liczbę pseudolosową z zakresu od 0 do wartości maksymalnej.
arc4random_buf wypełnić bufor pseudolosowym strumieniem bitów.
arc4random_stir inicjuje generator liczb pseudolosowych .

arc4randomRodzina losowych funkcji numerycznych nie są zdefiniowane w standardzie POSIX, ale stwierdzono, że w niektórych wspólnych libcwdrożeń. To odnosi się do generatora strumienia klucza z wyciekły wersji RC4 szyfr (stąd „ lleged RC4 ”), ale różne algorytmy, zwykle z innych szyfrów jak ChaCha20 , zostały wdrożone, ponieważ stosując tę samą nazwę.

Jakość losowości z randjest zwykle zbyt słaba, aby można ją było nawet uznać za statystycznie losową, i wymaga jawnego zasiewu. Zwykle zaleca się używanie arc4randomzamiast, randgdy to możliwe. Niektóre biblioteki C wdrożyć randza pomocą arc4random_uniformwewnętrznie.

Realizacje

W systemach POSIX , takich jak Linux i BSD , funkcje matematyczne (jak zadeklarowane w <math.h>) są pakowane oddzielnie w bibliotece matematycznej . W związku z tym, jeśli którakolwiek z tych funkcji jest używana, linker musi otrzymać dyrektywę . Istnieją różne implementacje, w tym: libm-lmlibm

Realizacje niekoniecznie pod nazwą libmobejmują:

Zobacz też

Bibliografia

Linki zewnętrzne