Математические символы универсального типа
Для iso C Standard 11 (C11) и более поздних <tgmath.h>
версий заголовок, помимо включения <math.h>
и <complex.h>
, предоставляет макросы, вызывающие соответствующую математические функции на основе типов параметров.
Математические функции библиотеки среды выполнения C доступны в реальных и сложных вариантах. Каждый вариант имеет три варианта в зависимости от типа аргумента: float
, double
и long double
. Так как C не поддерживает перегрузку, например C++, каждый вариант имеет другое имя. Например, чтобы получить абсолютное значение реального значения с плавающей запятой, вызовите либо fabsf
fabs
, либо fabsl
в зависимости от того, передаете float
double
ли вы значение или long double
значение соответственно. Чтобы получить комплексное абсолютное значение, необходимо вызвать один из cabsf
, cabs
или cabsl
в зависимости от того, передаете float
ли вы значение double
, и long double
сложное значение соответственно. Если аргументы не соответствуют ни одному из указанных выше типов, функция выбирается так, как если бы аргументы были двойными.
<tgmath.h>
содержит макросы, упрощающие выбор правильной математической функции для вызова. Макросы проверяют тип, который они передаются, а затем вызывают правильную функцию. Например, sqrt
макрос привязывается к sqrtf()
, но привязывается sqrt(9.9f)
sqrt(9.9)
к sqrt()
. Если хотя бы один аргумент макроса для универсального параметра является сложным, макрос привязывается к сложной функции; в противном случае он вызывает реальную функцию.
Макросы <tgmath.h>
универсального типа позволяют создавать более переносимый код, так как вам не нужно управлять приведением или выбирать разные имена функций в зависимости от типа аргумента.
Эти макросы находятся в собственном заголовке, чтобы программы, написанные с помощью заголовка <math.h>
, не прерывались. Так что double x = sin(42);
ведет себя так, как всегда есть, когда вы включаете <math.h>. Несмотря на это, большинство существующих программ C, как ожидается, не затрагиваются при включении заголовка <tgmath.h>
вместо <math.h>
него или <complex.h>
.
В следующей таблице перечислены макросы, доступные <tgmath.h>
и развернутые в них. modf
Не включен в эту таблицу, так как он не имеет соответствующего макроса типа универсального типа, так как он не ясно, как сделать его безопасным без усложнения разрешения типов.
Требования
Выполните сборку с помощью /std:c11
.
Пакет Windows SDK 10.0.20348.0 (версия 2104) или выше. Скачать последнюю версию Windows SDK можно здесь. Инструкции по установке и использованию пакета SDK для разработки C11 и C17 см. в статье Включение поддержки C11 и C17 в Visual Studio.