Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A Universal C Runtime Library (UCRT) fornece muitas funções de biblioteca matemática integrais e de ponto flutuante, incluindo todas as funções exigidas pela ISO C99. As funções de ponto flutuante são implementadas para equilibrar o desempenho com a correção. Como produzir o resultado arredondado corretamente pode ser proibitivamente caro, essas funções são projetadas para produzir eficientemente uma aproximação próxima ao resultado arredondado corretamente. Na maioria dos casos, o resultado produzido está dentro de +/-1 ULP (unidade de menor precisão) do resultado arredondado corretamente, embora possa haver casos em que haja maior imprecisão.
Para a norma ISO C 11 (C11) e posterior, o <tgmath.h> cabeçalho, além de incluir <math.h> e <complex.h>, fornece macros que invocam uma função matemática correspondente com base nos tipos dos parâmetros. Consulte matemática genérica de tipo para obter detalhes.
Muitas das funções da biblioteca matemática de ponto flutuante têm implementações diferentes para diferentes arquiteturas de CPU. Por exemplo, a CRT x86 de 32 bits pode ter uma implementação diferente da CRT x64 de 64 bits. Além disso, algumas das funções podem ter várias implementações para uma determinada arquitetura de CPU. A implementação mais eficiente é selecionada dinamicamente em tempo de execução, dependendo dos conjuntos de instruções suportados pela CPU. Por exemplo, no CRT x86 de 32 bits, algumas funções têm uma implementação x87 e uma implementação SSE2. Ao executar em uma CPU que suporta SSE2, a implementação SSE2 mais rápida é usada. Quando executado em uma CPU que não suporta SSE2, a implementação x87 mais lenta é usada. Como diferentes implementações das funções da biblioteca de matemática podem usar instruções de CPU diferentes e algoritmos diferentes para produzir seus resultados, as funções podem produzir resultados diferentes entre CPUs. Na maioria dos casos, os resultados estão dentro de +/-1 ULP do resultado arredondado corretamente, mas os resultados reais podem variar entre CPUs.
Versões mais recentes do UCRT podem melhorar a precisão e a precisão das funções da biblioteca matemática de ponto flutuante. Como o UCRT faz parte do sistema operacional Windows, você pode obter resultados diferentes para essas funções em diferentes versões do sistema operacional ou entre compilações de depuração e versão. Embora não seja recomendado, você pode vincular estaticamente ao UCRT para garantir resultados consistentes se precisar que essas funções produzam resultados idênticos em todos os lugares.
Versões anteriores de 16 bits do Microsoft C/C++ e Microsoft Visual C++ suportavam o long double tipo como um tipo de dados de ponto flutuante de precisão de 80 bits. Em versões posteriores do Visual C++, o long double tipo de dados é um tipo de dados de ponto flutuante de precisão de 64 bits idêntico ao double tipo. O compilador trata e long double como tipos distintos, mas as double funções são idênticas long double às suas double contrapartes. O CRT fornece long double versões das funções matemáticas para compatibilidade com o código-fonte ISO C99, mas observe que a representação binária pode diferir de outros compiladores.
Rotinas matemáticas e de ponto flutuante suportadas
| Rotina | Utilização |
|---|---|
abs, labs, llabs, _abs64 |
Calcula o valor absoluto de um tipo inteiro |
acos, acosf, acosl |
Calcula o arco cosseno |
acosh, acoshf, acoshl |
Calcula o cosseno de arco hiperbólico |
asin, asinf, asinl |
Calcula o seno do arco |
asinh, asinhf, asinhl |
Calcula o seno do arco hiperbólico |
atan, atanf, atanl, atan2, atan2f, atan2l |
Calcula a tangente do arco |
atanh, atanhf, atanhl |
Calcula a tangente do arco hiperbólico |
_atodbl, _atodbl_l |
Converte uma cadeia de caracteres específica da localidade em uma double |
atof, _atof_l |
Converte uma cadeia de caracteres em uma double |
_atoflt, _atoflt_l, _atoldbl, _atoldbl_l |
Converte uma cadeia de caracteres específica da localidade em um float ou long double |
cbrt, cbrtf, cbrtl |
Calcula a raiz do cubo |
ceil, ceilf, ceill |
Calcula o teto |
_chgsign, _chgsignf, _chgsignl |
Calcula o aditivo inverso |
_clear87, _clearfp |
Obtém e limpa o registro de status de ponto flutuante |
_control87, _controlfp, __control87_2 |
Obtém e define a palavra de controle de ponto flutuante |
_controlfp_s |
Versão segura do _controlfp |
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl |
Devolve um valor que tem a magnitude de um argumento e o sinal de outro |
cos, cosf, cosl |
Calcula o seno |
cosh, coshf, coshl |
Calcula o seno hiperbólico |
div, ldiv, lldiv |
Calcula o quociente e o restante de dois valores inteiros |
_ecvt, ecvt |
Converte a double em uma cadeia de caracteres |
_ecvt_s |
Versão segura do _ecvt |
erf, erff, erfl |
Calcula a função de erro |
erfc, erfcf, erfcl |
Calcula a função de erro complementar |
exp, expf, expl |
Calcula o exponencial ex |
exp2, exp2f, exp2l |
Calcula o exponencial 2x |
expm1, expm1f, expm1l |
Cálculos ex-1 |
fabs, fabsf, fabsl |
Calcula o valor absoluto de um tipo de vírgula flutuante |
_fcvt, fcvt |
Converte um número de vírgula flutuante em uma cadeia de caracteres |
_fcvt_s |
Versão segura do _fcvt |
fdim, fdimf, fdiml |
Determina a diferença positiva entre dois valores |
feclearexcept |
Limpa exceções de ponto flutuante especificadas |
fegetenv |
Armazena o ambiente de ponto flutuante atual |
fegetexceptflag |
Obtém o status de exceção de ponto flutuante especificado |
fegetround |
Obtém o modo de arredondamento de ponto flutuante |
feholdexcept |
Define o modo de exceção de ponto flutuante ininterrupto |
feraiseexcept |
Levanta as exceções de ponto flutuante especificadas |
fesetenv |
Define o ambiente de ponto flutuante atual |
fesetexceptflag |
Define os sinalizadores de status de ponto flutuante especificados |
fesetround |
Define o modo de arredondamento de ponto flutuante especificado |
fetestexcept |
Determina quais sinalizadores de status de exceção de ponto flutuante são definidos |
feupdateenv |
Restaura um ambiente de ponto flutuante e, em seguida, gera exceções anteriores |
floor, floorf, floorl |
Calcula o piso |
fma, fmaf, fmal |
Calcula uma multiplicação-adição fundida |
fmax, fmaxf, fmaxl |
Calcula o máximo dos argumentos |
fmin, fminf, fminl |
Calcula o mínimo dos argumentos |
fmod, fmodf, fmodl |
Calcula o restante de vírgula flutuante |
_fpclass, _fpclassf |
Devolve a classificação de um valor de vírgula flutuante |
fpclassify |
Devolve a classificação de um valor de vírgula flutuante |
_fpieee_flt |
Define um manipulador para exceções de ponto flutuante |
_fpreset |
Redefine o ambiente de ponto flutuante |
frexp, frexpf, frexpl |
Obtém a mantissa e expoente de um número de vírgula flutuante |
_gcvt, gcvt |
Converte um número de vírgula flutuante em uma cadeia de caracteres |
_gcvt_s |
Versão segura do _gcvt |
_get_FMA3_enable, _set_FMA3_enable |
Obtém ou define um sinalizador para uso de instruções FMA3 em x64 |
hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl |
Calcula a hipotenusa |
ilogb, ilogbf, ilogbl |
Calcula o expoente inteiro base-2 |
imaxabs |
Calcula o valor absoluto de um tipo inteiro |
imaxdiv |
Calcula o quociente e o restante de dois valores inteiros |
isfinite, _finite, _finitef |
Determina se um valor é finito |
isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered |
Comparar a ordem de dois valores de vírgula flutuante |
isinf |
Determina se um valor de vírgula flutuante é infinito |
isnan, _isnan, _isnanf |
Testa um valor de vírgula flutuante para NaN |
isnormal |
Testa se um valor de vírgula flutuante é finito e não subnormal |
_j0, _j1, _jn |
Calcula a função de Bessel |
ldexp, ldexpf, ldexpl |
Calcula x*2n |
lgamma, lgammaf, lgammal |
Calcula o logaritmo natural do valor absoluto da função gama |
llrint, llrintf, llrintl |
Arredonda um valor de vírgula flutuante para o valor mais próximo long long |
llround, llroundf, llroundl |
Arredonda um valor de vírgula flutuante para o valor mais próximo long long |
log, logf, logl, log10, log10f, log10l |
Calcula o logaritmo natural ou base-10 |
log1p, log1pf, log1pl |
Calcula o logaritmo natural de 1+x |
log2, log2f, log2l |
Calcula o logaritmo de base 2 |
logb, logbf, logbl, _logb, _logbf |
Devolve o expoente de um valor de vírgula flutuante |
lrint, lrintf, lrintl |
Arredonda um valor de vírgula flutuante para o valor mais próximo long |
_lrotl, _lrotr |
Gira um valor inteiro para a esquerda ou para a direita |
lround, lroundf, lroundl |
Arredonda um valor de vírgula flutuante para o valor mais próximo long |
_matherr |
O manipulador de erros matemáticos padrão |
__max |
Macro que retorna o maior de dois valores |
__min |
Macro que retorna o menor de dois valores |
modf, modff, modfl |
Divide um valor de vírgula flutuante em partes fracionárias e inteiras |
nan, nanf, nanl |
Devolve um valor NaN silencioso |
nearbyint, nearbyintf, nearbyintl |
Devolve o valor arredondado |
nextafter, nextafterf, nextafterl, _nextafter, _nextafterf |
Devolve o próximo valor de ponto flutuante representável |
nexttoward, nexttowardf, nexttowardl |
Devolve o próximo valor de ponto flutuante representável |
pow, powf, powl |
Devolve o valor de xy |
remainder, remainderf, remainderl |
Calcula o restante do quociente de dois valores de vírgula flutuante |
remquo, remquof, remquol |
Calcula o restante de dois valores inteiros |
rint, rintf, rintl |
Arredonda um valor de vírgula flutuante |
_rotl, _rotl64, _rotr, _rotr64 |
Gira bits em tipos inteiros |
round, roundf, roundl |
Arredonda um valor de vírgula flutuante |
_scalb, _scalbf |
Dimensiona o argumento por um poder de 2 |
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl |
Multiplica um número de vírgula flutuante por uma potência integral de FLT_RADIX |
_set_controlfp |
Define a palavra de controle de ponto flutuante |
_set_SSE2_enable |
Ativa ou desativa as instruções SSE2 |
signbit |
Testa o bit de sinal de um valor de ponto flutuante |
sin, sinf, sinl |
Calcula o seno |
sinh, sinhf, sinhl |
Calcula o seno hiperbólico |
sqrt, sqrtf, sqrtl |
Calcula a raiz quadrada |
_status87, _statusfp, _statusfp2 |
Obtém a palavra de status de ponto flutuante |
strtof, _strtof_l |
Converte uma cadeia de caracteres em uma float |
strtold, _strtold_l |
Converte uma cadeia de caracteres em uma long double |
tan, tanf, tanl |
Calcula a tangente |
tanh, tanhf, tanhl |
Calcula a tangente hiperbólica |
tgamma, tgammaf, tgammal |
Calcula a função gama |
trunc, truncf, truncl |
Trunca a parte fracionária |
_wtof, _wtof_l |
Converte uma cadeia de caracteres larga em uma double |
_y0, _y1, _yn |
Calcula a função de Bessel |
Ver também
Rotinas de tempo de execução Universal C por categoria
Primitivos de ponto flutuante