Matemática do tipo genérico
Para ISO C Standard 11 (C11) e posterior, o cabeçalho <tgmath.h>
, além de incluir <math.h>
e <complex.h>
, fornece macros que invocam uma função matemática correspondente com base nos tipos de parâmetros .
As funções matemáticas da biblioteca de runtime C vêm em variantes reais e complexas. Cada variante vem em três tipos, dependendo do tipo de argumento: float
, double
e long double
. Como C não dá suporte para sobrecarga como C++, cada variante tem um nome diferente. Por exemplo, para obter o valor absoluto de um valor de ponto flutuante real, você chamará fabsf
, fabs
ou fabsl
dependendo se estiver passando um valor float
, double
ou long double
, respectivamente. Para obter o valor absoluto complexo, você chamará um dos cabsf
, cabs
ou cabsl
dependendo se estiver passando um valor complexo float
, double
e long double
, respectivamente. Se os argumentos não corresponderem a nenhum dos tipos mencionados acima, a função será escolhida como se os argumentos fossem duplos.
<tgmath.h>
contém macros que simplificam a seleção da função matemática correta a ser chamada. As macros examinam o tipo que são passadas e, em seguida,chamam a função correta. Por exemplo, a macro sqrt
associa sqrt(9.9f)
a sqrtf()
, mas isso associa sqrt(9.9)
a sqrt()
. Se pelo menos um argumento de macro para um parâmetro genérico for complexo, a macro será vinculada a uma função complexa, caso contrário, ele invocará uma função real.
As macros genéricas de tipo em <tgmath.h>
permitem gravar código mais portátil porque não é necessário gerenciar a conversão ou selecionar os nomes de funções diferentes dependendo do tipo de argumento.
Essas macros estão no próprio cabeçalho para que os programas gravados usando o cabeçalho <math.h>
não sejam interrompidos. Desse modo, double x = sin(42);
se comportará como sempre quando você incluir <matemática.h>. Mesmo assim, espera-se que a maioria dos programas C existentes não sejam afetados quando o <tgmath.h>
cabeçalho for incluído, em vez de <math.h>
ou <complex.h>
.
A tabela a seguir lista as macros que estão disponíveis em <tgmath.h>
e para o que se expandem. modf
não está incluída nesta tabela porque não possui uma macro genérica de tipo correspondente, já que não está claro como torná-la seguro sem complicar a resolução do tipo.
Requisitos
Compilar com /std:c11
.
O SDK do Windows 10.0.20348.0 (versão 2104) ou posterior. Consulte o SDK do Windows para baixar o SDK mais recente. Para obter instruções sobre como instalar e usar o SDK para desenvolvimento C11 e C17, consulte Instalar o suporte C11 e C17 no Visual Studio.