Obsługa złożonych obliczeń matematycznych w języku C
Biblioteka środowiska uruchomieniowego języka Microsoft C (CRT) udostępnia złożone funkcje biblioteki matematycznej, w tym wszystkie wymagane przez iso C99. Kompilator nie obsługuje bezpośrednio słowa kluczowego complex
lub _Complex
, dlatego implementacja firmy Microsoft używa typów struktur do reprezentowania liczb złożonych.
Te funkcje są implementowane w celu zrównoważenia wydajności z poprawnością. Ponieważ generowanie poprawnie zaokrąglonego wyniku może być zbyt kosztowne, te funkcje są zaprojektowane tak, aby wydajnie uzyskać bliskie przybliżenie prawidłowego zaokrąglonego wyniku. W większości przypadków wygenerowany wynik znajduje się w jednostce +/-1 o najmniejszej precyzji (ULP) poprawnie zaokrąglonego wyniku, chociaż mogą wystąpić przypadki, w których występuje większa niedokładność.
Złożone procedury matematyczne opierają się na funkcjach biblioteki matematycznych zmiennoprzecinkowych na potrzeby ich implementacji. Te funkcje mają różne implementacje dla różnych architektur procesora CPU. Na przykład 32-bitowy X86 CRT może mieć inną implementację niż 64-bitowa X64 CRT. Ponadto niektóre funkcje mogą mieć wiele implementacji dla danej architektury procesora CPU. Najbardziej wydajna implementacja jest wybierana dynamicznie w czasie wykonywania w zależności od zestawów instrukcji obsługiwanych przez procesor. Na przykład w 32-bitowej architekturze X86 CRT niektóre funkcje mają implementację x87 i implementację SSE2. W przypadku uruchamiania na procesorze, który obsługuje SSE2, używana jest szybsza implementacja SSE2. W przypadku uruchamiania na procesorze CPU, który nie obsługuje protokołu SSE2, używana jest wolniejsza implementacja x87. Ponieważ różne implementacje funkcji biblioteki matematycznej mogą używać różnych instrukcji procesora CPU i różnych algorytmów do generowania wyników, funkcje mogą generować różne wyniki w różnych procesorach CPU. W większości przypadków wyniki znajdują się w ciągu +/-1 ULP poprawnie zaokrąglonego wyniku, ale rzeczywiste wyniki mogą się różnić w zależności od procesorów CPU.
Typy używane w złożonej matematyce
Implementacja nagłówka firmy complex.h
Microsoft definiuje te typy jako odpowiedniki standardowych natywnych typów złożonych C99:
Typ standardowy | Typ firmy Microsoft |
---|---|
float complex lub float _Complex |
_Fcomplex |
double complex lub double _Complex |
_Dcomplex |
long double complex lub long double _Complex |
_Lcomplex |
Nagłówek math.h
definiuje oddzielny typ , struct _complex
używany dla _cabs
funkcji. Typ struct _complex
nie jest używany przez równoważne złożone funkcje cabs
matematyczne , cabsf
, cabsl
.
Złożone stałe i makra
I
jest definiowany jako typ _Fcomplex
złożony zainicjowany przez { 0.0f, 1.0f }
element .
Trygonometrycznych
Function | opis |
---|---|
cacos , , cacosf cacosl |
Obliczanie cosinusu zespolonego łuku liczby zespolonej |
casin , , casinf casinl |
Obliczanie sinusu łuku złożonego liczby zespolonej |
catan , , catanf catanl |
Obliczanie tangensu zespolonego łuku liczby zespolonej |
ccos , , ccosf ccosl |
Obliczanie cosinusu złożonego liczby zespolonej |
csin , , csinf csinl |
Obliczanie sinusu złożonego liczby zespolonej |
ctan , , ctanf ctanl |
Obliczanie złożonego tangensu liczby zespolonej |
Funkcje hiperboliczne
Function | opis |
---|---|
cacosh , , cacoshf cacoshl |
Obliczanie cosinusu hiperbolicznego łuku złożonego liczby |
casinh , , casinhf casinhl |
Obliczanie sinusu hiperbolicznego łuku złożonego liczby zespolonej |
catanh , , catanhf catanhl |
Obliczanie tangensu hiperbolicznego łuku złożonego liczby |
ccosh , , ccoshf ccoshl |
Obliczanie złożonego cosinusu hiperbolicznego liczby zespolonej |
csinh , , csinhf csinhl |
Obliczanie złożonego sinusu hiperbolicznego liczby zespolonej |
ctanh , , ctanhf ctanhl |
Obliczanie złożonego tangensa hiperbolicznego liczby zespolonej |
Funkcje wykładnicze i logarytmyczne
Function | opis |
---|---|
cexp , , cexpf cexpl |
Obliczanie złożonego wykładnika liczby zespolonej |
clog , , clogf clogl |
Obliczanie logarytmu naturalnego (base-e) liczby zespolonej |
clog10 , , clog10f clog10l |
Obliczanie złożonego logarytmu base-10 liczby zespolonej |
Funkcje mocy i wartości bezwzględnej
Function | opis |
---|---|
cabs , , cabsf cabsl |
Obliczanie złożonej wartości bezwzględnej (nazywanej również normą, modulem lub wielkością) liczby zespolonej |
cpow , , cpowf cpowl |
Obliczanie złożonej funkcji zasilania |
csqrt , , csqrtf csqrtl |
Obliczanie złożonego pierwiastek kwadratowy liczby zespolonej |
Funkcje manipulowania
Function | opis |
---|---|
_Cbuild , , _FCbuild _LCbuild |
Konstruowanie liczby zespolonej z rzeczywistych i wyimaginowanych części |
carg , , cargf cargl |
Oblicz argument (nazywany również kątem fazy) liczby zespolonej |
cimag , , cimagf cimagl |
Obliczanie wyimaginowanej części liczby zespolonej |
conj , , conjf conjl |
Obliczanie złożonego sprzężenia liczby zespolonej |
cproj , , cprojf cprojl |
Obliczanie projekcji liczby zespolonej na sferę Riemanna |
creal , , crealf creall |
Obliczanie rzeczywistej części liczby zespolonej |
norm , , normf norml |
Obliczanie wielkości kwadratowej liczby zespolonej |
Funkcje operacji
Ponieważ liczby zespolone nie są typem natywnym w kompilatorze firmy Microsoft, standardowe operatory arytmetyczne nie są definiowane w typach złożonych. Dla wygody te złożone funkcje biblioteki matematycznej umożliwiają ograniczone manipulowanie liczbami złożonymi w kodzie użytkownika:
Function | opis |
---|---|
_Cmulcc , , _FCmulcc _LCmulcc |
Mnożenie dwóch liczb zespolonych |
_Cmulcr , , _FCmulcr _LCmulcr |
Mnożenie zespolonej i liczby zmiennoprzecinkowych |
Zobacz też
Matematyka ogólna typu
Procedury czasu wykonywania języka Universal C według kategorii