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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla