Funkcje matematyczne niezależne od typu
W przypadku standardu ISO C Standard 11 (C11) i nowszych nagłówek oprócz elementów <math.h>
i <complex.h>
udostępnia makra, <tgmath.h>
które wywołują odpowiednią funkcję matematyczną na podstawie typów parametrów.
Funkcje matematyczne biblioteki środowiska uruchomieniowego języka C są dostępne w rzeczywistych i złożonych wariantach. Każdy wariant ma trzy warianty, w zależności od typu argumentu: float
, double
i long double
. Ponieważ język C nie obsługuje przeciążenia, takiego jak C++, każdy wariant ma inną nazwę. Aby na przykład uzyskać wartość bezwzględną rzeczywistej wartości zmiennoprzecinkowej, należy wywołać fabsf
metodę , fabs
lub fabsl
w zależności od tego, czy przekazujesz float
odpowiednio wartość , double
lub long double
. Aby uzyskać złożoną wartość bezwzględną, należy wywołać jedną z cabsf
wartości , cabs
lub cabsl
w zależności od tego, czy przekazujesz odpowiednio wartość zespolonej float
, double
i long double
. Jeśli argumenty nie pasują do żadnego z wymienionych powyżej typów, funkcja jest wybierana tak, jakby argumenty były podwójne.
<tgmath.h>
zawiera makra, które upraszczają wybór odpowiedniej funkcji matematycznej do wywołania. Makra sprawdzają typ, który są przekazywane, a następnie wywołają właściwą funkcję. Na przykład sqrt
makro wiąże się z sqrtf()
sqrt(9.9f)
elementem , ale wiąże się z elementem sqrt(9.9)
sqrt()
. Jeśli co najmniej jeden argument makra dla parametru ogólnego jest złożony, makro wiąże się z funkcją złożoną; w przeciwnym razie wywołuje rzeczywistą funkcję.
Makra ogólne typu w programie <tgmath.h>
umożliwiają pisanie bardziej przenośnego kodu, ponieważ nie trzeba zarządzać rzutowaniem ani wybierać różnych nazw funkcji w zależności od typu argumentu.
Te makra znajdują się we własnym nagłówku, dzięki czemu programy napisane przy użyciu nagłówka <math.h>
nie zostaną przerwane. Zachowuje double x = sin(42);
się tak, jak zawsze, gdy uwzględniasz <math.h>. Mimo to większość istniejących programów języka C powinna nie mieć wpływu, gdy <tgmath.h>
nagłówek zostanie dołączony zamiast <math.h>
lub <complex.h>
.
W poniższej tabeli wymieniono makra, które są dostępne w <tgmath.h>
programie i do których się rozszerzają. modf
nie znajduje się w tej tabeli, ponieważ nie ma odpowiedniego makra ogólnego typu, ponieważ nie jest jasne, jak zapewnić bezpieczeństwo bez komplikowania rozpoznawania typów.
Wymagania
Skompiluj za pomocą polecenia /std:c11
.
Windows SDK 10.0.20348.0 (wersja 2104) lub nowsza. Zobacz Zestaw Windows SDK , aby pobrać najnowszy zestaw SDK. Aby uzyskać instrukcje dotyczące instalowania i używania zestawu SDK dla programowania C11 i C17, zobacz Instalowanie obsługi C11 i C17 w programie Visual Studio.