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 _complexużywany dla _cabs funkcji. Typ struct _complex nie jest używany przez równoważne złożone funkcje cabsmatematyczne , 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