Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A biblioteca Universal C Runtime (UCRT) fornece muitas funções de biblioteca matemática integral 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 exatidão. Uma vez que produzir o resultado arredondado corretamente pode ter um custo proibitivo, essas funções foram criadas para produzir de forma eficiente um resultado próximo 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 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 . Confira Matemática do tipo genérico para obter detalhes.
Muitas das funções de biblioteca matemática de ponto flutuante têm implementações diferentes para diferentes arquiteturas de CPU. Por exemplo, o CRT x86 de 32 bits pode ter uma implementação diferente do 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 com suporte da CPU. Por exemplo, no CRT x86 de 32 bits, algumas funções têm uma implementação x87 e uma implementação SSE2. Quando executado em uma CPU com suporte para SSE2, é usada a implementação SSE2 mais rápida. Quando executado em uma CPU sem suporte para SSE2, é usada a implementação x87 mais lenta. Uma vez que diferentes implementações das funções da biblioteca de matemática podem usar diferentes instruções de CPU e diferentes algoritmos para produzir seus resultados, as funções podem produzir resultados diferentes entre as CPUs. Na maioria dos casos, os resultados estão dentro de +/-1 ULP do resultado arredondado corretamente, mas os resultados reais podem variar entre as CPUs.
Versões mais recentes do UCRT podem melhorar a precisão e a precisão das funções de 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 builds de depuração e versão. Embora não seja recomendável, você pode vincular estaticamente ao UCRT para garantir resultados consistentes se precisar dessas funções produzir resultados idênticos em todos os lugares.
Versões de 16 bits anteriores do Microsoft C/C++ e do Microsoft Visual C++ davam suporte ao tipo long double
como um tipo de dados de ponto flutuante com precisão de 80 bits. Em versões posteriores do Visual C++, o tipo de dados long double
é um tipo de dados de ponto flutuante com precisão de 64 bits idêntico ao tipo double
. O compilador trata long double
e double
como tipos distintos, mas as funções long double
são idênticas às suas double
correspondentes. O CRT fornece versões de long double
das funções matemáticas para compatibilidade com código-fonte ISO C99, mas observe que a representação binária pode ser diferente de outros compiladores.
Rotinas matemáticas de ponto flutuante compatíveis
Rotina | Usar |
---|---|
abs , labs , , llabs _abs64 |
Calcula o valor absoluto de um tipo inteiro |
acos , , acosf acosl |
Calcula o arco cosseno |
acosh , , acoshf acoshl |
Calcula o arco cosseno hiperbólico |
asin , , asinf asinl |
Calcula o arco seno |
asinh , , asinhf asinhl |
Calcula o arco seno hiperbólico |
atan , atanf , atanl , atan2 , atan2f , , atan2l |
Calcula o arco tangente |
atanh , , atanhf atanhl |
Calcula o arco tangente hiperbólico |
_atodbl , _atodbl_l |
Converte uma cadeia de caracteres específica da localidade em um double |
atof , _atof_l |
Converte uma cadeia de caracteres em um 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 cúbica |
ceil , , ceilf ceill |
Calcula o limite |
_chgsign , , _chgsignf _chgsignl |
Calcula o inverso de aditivo |
_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 de _controlfp |
copysign , copysignf , copysignl , _copysign , _copysignf , , _copysignl |
Retorna 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 resto de dois valores inteiros |
_ecvt , ecvt |
Converte um double em uma cadeia de caracteres |
_ecvt_s |
Versão segura de _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 ex exponencial |
exp2 , , exp2f exp2l |
Calcula o 2x exponencial |
expm1 , , expm1f expm1l |
Calcula o ex-1 |
fabs , , fabsf fabsl |
Calcula o valor absoluto de um tipo de ponto flutuante |
_fcvt , fcvt |
Converte um número de ponto flutuante em uma cadeia de caracteres |
_fcvt_s |
Versão segura de _fcvt |
fdim , , fdimf fdiml |
Determina a diferença positiva entre dois valores |
feclearexcept |
Limpa as exceções de ponto flutuante especificadas |
fegetenv |
Armazena o ambiente atual de ponto flutuante |
fegetexceptflag |
Gera 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 contínuo |
feraiseexcept |
Aciona as exceções de ponto flutuante especificadas |
fesetenv |
Define o ambiente atual de ponto flutuante |
fesetexceptflag |
Define os sinalizadores do status de ponto flutuante especificados |
fesetround |
Define o modo de arredondamento de ponto flutuante especificado |
fetestexcept |
Determina quais sinalizadores do status de exceção de ponto flutuante são definidos |
feupdateenv |
Restaura um ambiente de ponto flutuante, em seguida, aciona exceções anteriores |
floor , , floorf floorl |
Calcula a base |
fma , , fmaf fmal |
Calcula uma adição múltipla mesclada |
fmax , , fmaxf fmaxl |
Calcula o máximo de argumentos |
fmin , , fminf fminl |
Calcula o mínimo dos argumentos |
fmod , , fmodf fmodl |
Calcula o restante do ponto flutuante |
_fpclass , _fpclassf |
Retorna a classificação de um valor do ponto flutuante |
fpclassify |
Retorna a classificação de um valor do ponto 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 o expoente de um número de ponto flutuante |
_gcvt , gcvt |
Converte um número de ponto flutuante em uma cadeia de caracteres |
_gcvt_s |
Versão segura de _gcvt |
_get_FMA3_enable , _set_FMA3_enable |
Obtém ou define um sinalizador para o uso de instruções FMA3 em x64 |
hypot , hypotf , hypotl , _hypot , _hypotf , , _hypotl |
Calcula a hipotenusa |
ilogb , , ilogbf ilogbl |
Calcula o expoente de base 2 do inteiro |
imaxabs |
Calcula o valor absoluto de um tipo inteiro |
imaxdiv |
Calcula o quociente e o resto 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 ponto flutuante |
isinf |
Determina se um valor de ponto flutuante é infinito |
isnan , , _isnan _isnanf |
Testa um valor de ponto flutuante para NaN |
isnormal |
Testa se um valor de ponto flutuante é finito e não subnormal |
_j0 , , _j1 _jn |
Calcula a função 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 ponto flutuante para o valor long long mais próximo |
llround , , llroundf llroundl |
Arredonda um valor de ponto flutuante para o valor long long mais próximo |
log , logf , logl , log10 , log10f , , log10l |
Calcular o logaritmo natural ou de 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 |
Retorna o expoente de um valor de ponto flutuante |
lrint , , lrintf lrintl |
Arredonda um valor de ponto flutuante para o valor long mais próximo |
_lrotl , _lrotr |
Gira um valor inteiro para a esquerda ou direita |
lround , , lroundf lroundl |
Arredonda um valor de ponto flutuante para o valor long mais próximo |
_matherr |
O manipulador de erro de matemática 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 ponto flutuante em partes inteiras e fracionárias |
nan , , nanf nanl |
Retorna um valor NaN silencioso |
nearbyint , , nearbyintf nearbyintl |
Retorna o valor arredondado |
nextafter , nextafterf , nextafterl , , _nextafter _nextafterf |
Retorna o próximo valor de ponto flutuante representável |
nexttoward , , nexttowardf nexttowardl |
Retorna o próximo valor de ponto flutuante representável |
pow , , powf powl |
Retorna o valor de x y |
remainder , , remainderf remainderl |
Calcula o restante do quociente de dois valores de ponto flutuante |
remquo , , remquof remquol |
Calcula o resto de dois valores inteiros |
rint , , rintf rintl |
Arredonda um valor de ponto flutuante |
_rotl , _rotl64 , , _rotr _rotr64 |
Gira bits em tipos de inteiros |
round , , roundf roundl |
Arredonda um valor de ponto flutuante |
_scalb , _scalbf |
Dimensiona o argumento por uma potência de 2 |
scalbn , scalbnf , scalbnl , scalbln , scalblnf , , scalblnl |
Multiplica um número de ponto flutuante por uma potência integral de FLT_RADIX |
_set_controlfp |
Define a palavra de controle de ponto flutuante |
_set_SSE2_enable |
Habilita ou desabilita 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 |
Define a palavra de status de ponto flutuante |
strtof , _strtof_l |
Converte uma cadeia de caracteres em um float |
strtold , _strtold_l |
Converte uma cadeia de caracteres em um 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 largos em um double |
_y0 , , _y1 _yn |
Calcula a função Bessel |
Confira também
Rotinas de runtime C universais por categoria
Primitivos de ponto flutuante