Onde é padrão C ++ definir o intervalo de valores de tipos float?
-
08-07-2019 - |
Pergunta
Como tanto quanto sei valores de ponto flutuante são de forma a n * 2 ^ e, com
- gama flutuador sendo n = - (2 ^ 23-1) - (2 ^ 23-1), e e = -126 - 127,
- gama dupla sendo n = - (2 ^ 52-1) - (2 ^ 52-1), e e = -1.022-1023
Eu estava olhando através do C ++ padrão, mas não conseguiu encontrar o lugar onde especifica Standard Este ou mandatos a associação do flutuador, tipos dobro e longo duplos com intervalos definidos em outras normas (IEEE). A única coisa relacionada eu encontrei no 3.9.1.8 é:
Existem três tipos ponto flutuante: float, double e long double. O tipo fornece o dobro, pelo menos, tanta precisão quanto float, eo tipo fornece long double pelo menos tanta precisão quanto o dobro. O conjunto de valores do tipo de flutuador é um subconjunto do conjunto de valores do tipo de dupla; o conjunto de valores de tipo duplo, é um subconjunto do conjunto de valores do tipo de dupla longa. A representação valor de tipos de ponto flutuante é definido pela implementação.
E nenhuma menção do intervalo mínimo previsto pelo tipo.
Onde / como é que o padrão especificar o intervalo de valores (mínimo?) Dos tipos de ponto flutuante? Ou pode um compilador escolher livremente qualquer faixa de valor e ainda ser compatível com padrão?
Solução
Assim como integer limites numberic, os limites para float
, double
e long double
são importados do padrão C. O valor mínimo para constantes FLT_MAX
, DBL_MAX
e LDBL_MAX
é 1E+37
. Por sua *_MIN
variantes o valor máximo é 1E-37
.
Outras dicas
O que você citou é tudo que é garantida sobre os tipos de ponto flutuante em C ++. Como diz, sua representação é definido pela implementação.
Você pode, no entanto, a consulta para obter informações sobre os limites e se os tipos são IEC 559 (IEEE 754) tipos especificados usando os modelos std::numeric_limits
em <limits>
.
A norma não especifica essas coisas porque eles são frequentemente dependentes de hardware e mudança ao longo do tempo. Enquanto hoje 32 bits são considerados um padrão, em 10 anos fazendo as coisas em menos de 64 bit pode, possivelmente, parece de mau gosto.