Conversões a partir de tipos de ponto flutuante
Um valor float convertido em double ou a long double, ou double convertido em long double não sofre nenhuma alteração no valor. Um valor double convertido em um valor float é representado exatamente, se possível. A precisão poderá ser perdida se o valor não puder ser representado exatamente. Se o resultado for fora do intervalo, o comportamento será indefinido. Consulte Limites em constantes de ponto flutuante para ver o intervalo de tipos de ponto flutuante.
Um valor flutuante é convertido em um valor integral. Para isso, primeiro converta long, o valor long no valor completo específico. A parte decimal do valor flutuante é rejeitada na conversão para long. Se o resultado for ainda muito grande para caber em long, o resultado da conversão será indefinido.
Específico da Microsoft
Ao converter um número de ponto flutuante de double ou de long double em um número de ponto flutuante menor, o valor da variável de ponto flutuante será truncado para zero quando um estouro negativo ocorrer. Um estouro causa um erro em tempo de execução. O compilador C da Microsoft mapeia long double para o tipo double.
FIM de Específico da Microsoft
A tabela a seguir resume as conversões de tipos flutuantes.
Conversões de tipos de ponto flutuante
De |
Para |
Método |
---|---|---|
float |
char |
Converter em long; converter long em char |
float |
short |
Converter em long; converter long em short |
float |
long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long, o resultado será indefinido. |
float |
unsigned short |
Converter em long; converter long em unsigned short |
float |
unsigned long |
Converter em long; converter long em unsigned long |
float |
double |
Representação de alteração interna |
float |
long double |
Representação de alteração interna |
double |
char |
Converter em float; converter float em char |
double |
short |
Converter em float; converter float em short |
double |
long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long, o resultado será indefinido. |
double |
unsigned short |
Converter em long; converter long em unsigned short |
double |
unsigned long |
Converter em long; converter long em unsigned long |
double |
float |
É representado como um float. Se o valor double não pode ser representado exatamente como float, ocorre perda de precisão. Se o valor for muito grande para ser representado como float, o resultado será indefinido. |
long double |
char |
Converter em float; converter float em char |
long double |
short |
Converter em float; converter float em short |
long double |
long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long, o resultado será indefinido. |
long double |
unsigned short |
Converter em long; converter long em unsigned short |
long double |
unsigned long |
Converter em long; converter long em unsigned long |
long double |
float |
É representado como um float. Se o valor double não pode ser representado exatamente como float, ocorre perda de precisão. Se o valor for muito grande para ser representado como float, o resultado será indefinido. |
long double |
double |
O valor longdouble é tratado como double. |
As conversões dos valores float, double ou long double para unsigned long não são precisas se o valor que está sendo convertido for maior que o valor máximo positivo long.