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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top