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.
Um valor de vírgula flutuante convertido em outro tipo de vírgula flutuante não sofre alteração no valor se o valor original for representável exatamente no tipo de resultado. Se o valor original for numérico, mas não for representável exatamente, o resultado será o próximo maior ou o próximo menor valor representável. Consulte Limites em constantes de vírgula flutuante para o intervalo de tipos de vírgula flutuante.
Um valor de vírgula flutuante que é convertido em um tipo integral é primeiro truncado descartando qualquer valor fracionário. Se esse valor truncado for representável no tipo de resultado, o resultado deverá ser esse valor. Quando não é representável, o valor do resultado é indefinido.
Específico da Microsoft
Os compiladores da Microsoft usam representação binary32 IEEE-754 para float valores e representação binary64 para long double e double. Uma vez que long double usam double a mesma representação, eles têm o mesmo alcance e precisão.
Quando o compilador converte um doublelong double número de ponto flutuante em um float, ele arredonda o resultado de acordo com os controles de ambiente de ponto flutuante, que padrão para "arredondar para mais perto, laços para par". Se um valor numérico for muito alto ou muito baixo para ser representado como um valor numérico float , o resultado da conversão será infinito positivo ou negativo de acordo com o sinal do valor original, e uma exceção de estouro será gerada, se habilitada.
O resultado de uma conversão para um tipo integral menor do que long é o resultado da conversão do valor em e, em longseguida, da conversão para o tipo de resultado.
Para conversão em tipos inteiros pelo menos tão grandes quanto long, uma conversão de um valor que é muito alto ou muito baixo para representar no tipo de resultado pode retornar qualquer um dos seguintes valores:
O resultado pode ser um valor sentinela, que é o valor representável mais distante de zero. Para tipos assinados, é o menor valor representável (0x800... 0). Para tipos não assinados, é o maior valor representável (0xFF... F).
O resultado pode estar saturado, onde valores muito altos para representar são convertidos para o valor representável mais alto. Os valores muito baixos para representar são convertidos para o menor valor representável. Um destes dois valores é também utilizado como valor sentinela.
Para conversão para
unsigned longouunsigned long long, o resultado da conversão de um valor fora do intervalo pode ser algum valor diferente do valor representável mais alto ou mais baixo. Se o resultado é um valor sentinela ou saturado ou não, depende das opções do compilador e da arquitetura de destino. Versões futuras do compilador podem retornar um valor saturado ou sentinela.
END Específico da Microsoft
A tabela a seguir resume as conversões de tipos flutuantes.
Tabela de conversões de tipos de vírgula flutuante
| De | Para | Método |
|---|---|---|
float |
char |
Converter em longe, em seguida, converter long em char |
float |
short |
Converter em longe, em seguida, converter long em short |
float |
int |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como int, o resultado será indefinido. |
float |
long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long, o resultado será indefinido. |
float |
long long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long long, o resultado será indefinido. |
float |
unsigned char |
Converter em longe, em seguida, converter long em unsigned char |
float |
unsigned short |
Converter em longe, em seguida, converter long em unsigned short |
float |
unsigned |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned, o resultado será indefinido. |
float |
unsigned long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned long, o resultado será indefinido. |
float |
unsigned long long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned long long, o resultado será indefinido. |
float |
double |
Representar como um doublearquivo . |
float |
long double |
Representar como um long doublearquivo . Em MSVC, long double e double têm a mesma representação. |
double |
char |
Converter em floate, em seguida, converter float em char |
double |
short |
Converter em floate, em seguida, converter float em short |
double |
int |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como int, o resultado será indefinido. |
double |
long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como long, o resultado será indefinido. |
double |
unsigned char |
Converter em longe, em seguida, converter long em unsigned char |
double |
unsigned short |
Converter em longe, em seguida, converter long em unsigned short |
double |
unsigned |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned, o resultado será indefinido. |
double |
unsigned long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned long, o resultado será indefinido. |
double |
unsigned long long |
Truncar no ponto decimal. Se o resultado for muito grande para ser representado como unsigned long long, o resultado será indefinido. |
double |
float |
Representar como um floatarquivo . Se o double valor não puder ser representado exatamente como float, ocorrerá perda de precisão. |
double |
long double |
O long double valor é tratado como double. |
As conversões de long double seguem o mesmo método que as conversões de double.