Udostępnij za pośrednictwem


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, , cacosfcacosl Obliczanie cosinusu zespolonego łuku liczby zespolonej
casin, , casinfcasinl Obliczanie sinusu łuku złożonego liczby zespolonej
catan, , catanfcatanl Obliczanie tangensu zespolonego łuku liczby zespolonej
ccos, , ccosfccosl Obliczanie cosinusu złożonego liczby zespolonej
csin, , csinfcsinl Obliczanie sinusu złożonego liczby zespolonej
ctan, , ctanfctanl Obliczanie złożonego tangensu liczby zespolonej

Funkcje hiperboliczne

Function opis
cacosh, , cacoshfcacoshl Obliczanie cosinusu hiperbolicznego łuku złożonego liczby
casinh, , casinhfcasinhl Obliczanie sinusu hiperbolicznego łuku złożonego liczby zespolonej
catanh, , catanhfcatanhl Obliczanie tangensu hiperbolicznego łuku złożonego liczby
ccosh, , ccoshfccoshl Obliczanie złożonego cosinusu hiperbolicznego liczby zespolonej
csinh, , csinhfcsinhl Obliczanie złożonego sinusu hiperbolicznego liczby zespolonej
ctanh, , ctanhfctanhl Obliczanie złożonego tangensa hiperbolicznego liczby zespolonej

Funkcje wykładnicze i logarytmyczne

Function opis
cexp, , cexpfcexpl Obliczanie złożonego wykładnika liczby zespolonej
clog, , clogfclogl Obliczanie logarytmu naturalnego (base-e) liczby zespolonej
clog10, , clog10fclog10l Obliczanie złożonego logarytmu base-10 liczby zespolonej

Funkcje mocy i wartości bezwzględnej

Function opis
cabs, , cabsfcabsl Obliczanie złożonej wartości bezwzględnej (nazywanej również normą, modulem lub wielkością) liczby zespolonej
cpow, , cpowfcpowl Obliczanie złożonej funkcji zasilania
csqrt, , csqrtfcsqrtl 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, , cargfcargl Oblicz argument (nazywany również kątem fazy) liczby zespolonej
cimag, , cimagfcimagl Obliczanie wyimaginowanej części liczby zespolonej
conj, , conjfconjl Obliczanie złożonego sprzężenia liczby zespolonej
cproj, , cprojfcprojl Obliczanie projekcji liczby zespolonej na sferę Riemanna
creal, , crealfcreall Obliczanie rzeczywistej części liczby zespolonej
norm, , normfnorml 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