Biblioteca C ++ - <limits>

Introdução

É um tipo de limites numéricos e fornece informações sobre as propriedades dos tipos aritméticos (integrais ou de ponto flutuante) na plataforma específica para a qual a biblioteca é compilada.

Declaração

A seguir está a declaração para std :: numeric_limits.

template <class T> numeric_limits;

C ++ 11

template <class T> numeric_limits;

Parâmetros

T - É um tipo de aula.

Exemplo

No exemplo abaixo para std :: numeric_limits.

#include <limits>
#include <iostream>

int main() {
   std::cout << "type\tlowest type\thighest type\n";
   std::cout << "int\t"
      << std::numeric_limits<int>::lowest() << '\t'
      << std::numeric_limits<int>::max() << '\n';
   std::cout << "float\t"
      << std::numeric_limits<float>::lowest() << '\t'
      << std::numeric_limits<float>::max() << '\n';
   std::cout << "double\t"
      << std::numeric_limits<double>::lowest() << '\t'
      << std::numeric_limits<double>::max() << '\n';
}

O exemplo de saída deve ser assim -

type	lowest type	highest type
int	-2147483648	2147483647
float	-3.40282e+38	3.40282e+38
double	-1.79769e+308	1.79769e+308

Instanciações de modelo

Os tipos aritméticos fundamentais do C ++ 98 devem ser assim -

tipos aritméticos fundamentais
tipos integrais bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
tipos de ponto flutuante float
double
long double

Os tipos aritméticos fundamentais do C ++ 11 devem ser assim -

tipos aritméticos fundamentais
tipos integrais bool
char
char16_t
char32_t
wchar_t
signed char
short int
int
long int
long long int
unsigned char
unsigned short int
unsigned int
unsigned long int
unsigned long long int
tipos de ponto flutuante float
double
long double

Membros

membro tipo propriedade
is_specialized bool É truepara todos (ou seja, aqueles para os quaisnumeric_limitsé especializado). e falsepara todos os outros tipos.
min () T

É um valor finito mínimo.

Para tipos flutuantes com desnormalização (número variável de bits expoentes): valor normalizado positivo mínimo.

Equivalente a CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINou 0, dependendo do tipo.

max () T

É um valor finito máximo.

Equivalente a CHAR_MAX, SCHAR_MAX, UCHAR_MAX, SHRT_MAX, USHRT_MAX, INT_MAX, UINT_MAX, LONG_MAX, ULONG_MAX, LLONG_MAX, ULLONG_MAX, UINT_LEAST16_MAX, UINT_LEAST32_MAX, FLT_MAX, DBL_MAX ou LDBL_MAX, dependendo do tipo.

mais baixo () T

É um valor finito mínimo. (desde C ++ 11)

Para tipos integrais: o mesmo que min ().

Para tipos de ponto flutuante: dependente da implementação; geralmente, o negativo demax ().

dígitos int

É para tipos inteiros: número de bits sem sinal ( dígitos da base da raiz ) na representação.

Para tipos flutuantes: número de dígitos (na base da raiz ) na mantissa (equivalente aFLT_MANT_DIG, DBL_MANT_DIG ou LDBL_MANT_DIG)

dígitos 10 int

É um número de dígitos (em base decimal), que podem ser representados sem alteração.

Equivalente a FLT_DIG, DBL_DIG ou LDBL_DIG para tipos flutuantes.

max_digits10 int É um número de dígitos (em base decimal), necessário para garantir que os valores que diferem sejam sempre diferenciados.
is_signed bool true se o tipo for assinado.
is_integer bool true se o tipo for inteiro.
is_exact bool true se o tipo usa representações exatas.
raiz int

É para tipos inteiros: base da representação.

Para tipos flutuantes: base do expoente da representação (equivalente a FLT_RADIX)

épsilon () T

É um epsilon de máquina (a diferença entre 1 e o menor valor maior que 1 que é representável).

Equivalente a FLT_EPSILON, DBL_EPSILON ou LDBL_EPSILON para tipos flutuantes.

round_error () T Ele mede o erro máximo de arredondamento.
min_exponent int

É um valor inteiro negativo mínimo, de forma que a raiz elevada (min_exponent-1)gere um número de ponto flutuante normalizado.

Equivalente a FLT_MIN_EXP, DBL_MIN_EXP ou LDBL_MIN_EXP para tipos flutuantes.

min_exponent10 int

É um valor inteiro negativo mínimo, de modo que 10 elevado a essa potência gera um número de ponto flutuante normalizado.

Equivalente a FLT_MIN_10_EXP, DBL_MIN_10_EXP ou LDBL_MIN_10_EXP para tipos flutuantes.

max_exponent int

É um valor inteiro máximo de forma que a raiz elevada (max_exponent-1)gere um número de ponto flutuante finito representável.

Equivalente a FLT_MAX_EXP, DBL_MAX_EXP ou LDBL_MAX_EXP para tipos flutuantes.

max_exponent10 int

É um valor inteiro máximo tal que 10 elevado a essa potência gera um número de ponto flutuante finito normalizado.

Equivalente a FLT_MAX_10_EXP, DBL_MAX_10_EXP ou LDBL_MAX_10_EXP para tipos flutuantes.

has_infinity bool true se o tipo tiver uma representação para infinito positivo.
has_quiet_NaN bool true se o tipo tiver uma representação para um silencioso (sem sinalização) "Não é um Número".
has_signaling_NaN bool true se o tipo tiver uma representação para uma sinalização "Não é um número".
has_denorm float_denorm_style

É um valor desnormalizado (representações com um número variável de bits expoentes). Um tipo pode ter qualquer um dos seguintes valores enum -

denorm_absent, se não permitir valores desnormalizados.

denorm_present, se permitir valores desnormalizados.

denorm_indeterminate, se indeterminado em tempo de compilação.

has_denorm_loss bool truese uma perda de precisão for detectada como uma perda de desnormalização, em vez de um resultado inexato.
infinidade() T Representa um infinito positivo , se disponível.
quiet_NaN () T Representa de silencioso (sem sinalização) "Não-um-Número" , se disponível.
signaling_NaN () T Representa a sinalização "Não é um número" , se disponível.
denorm_min () T

Valor mínimo desnormalizado positivo.

É para tipos que não permitem valores desnormalizados: o mesmo que min().

is_iec559 bool

true se o tipo estiver de acordo com o padrão IEC-559 / IEEE-754.

Um tipo IEC-559 sempre tem has_infinity, has_quiet_NaN e has_signaling_NaNdefinido como true; Einfinidade, quiet_NaN e signaling_NaN retornar algum valor diferente de zero.

is_bounded bool true se o conjunto de valores representado pelo tipo for finito.
is_modulo bool truese o tipo for módulo. Um tipo é módulo se for possível somar dois números positivos e ter um resultado que envolve um terceiro número que é menor.
armadilhas bool true se o trapping for implementado para o tipo.
tinyness_antes bool true se pequenez for detectado antes do arredondamento.
round_style float_round_style

É um estilo arredondado. Um tipo pode ter qualquer um dos seguintes valores enum -

round_toward_zero, se arredondar para zero.

round_to_nearest, se for arredondado para o valor representável mais próximo.

round_toward_infinity, se arredondar para o infinito.

round_toward_neg_infinity, se arredondar para o infinito negativo.

round_indeterminate, se o estilo de arredondamento for indeterminável em tempo de compilação.

Para todos os tipos acima que não são tipos aritméticos fundamentais, a definição de modelo padrão é usada -

C ++ 98

template <class T> class numeric_limits {
   public:
      static const bool is_specialized = false;
      static T min() throw();
      static T max() throw();
      static const int digits = 0;
      static const int digits10 = 0;
      static const bool is_signed = false;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 0;
      static T epsilon() throw();
      static T round_error() throw();

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;
      static T infinity() throw();
      static T quiet_NaN() throw();
      static T signaling_NaN() throw();
      static T denorm_min() throw();

      static const bool is_iec559 = false;
      static const bool is_bounded = false;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
};

C ++ 11

template <class T> class numeric_limits {
   public:
      static constexpr bool is_specialized = false;
      static constexpr T min() noexcept { return T(); }
      static constexpr T max() noexcept { return T(); }
      static constexpr T lowest() noexcept { return T(); }
      static constexpr int digits = 0;
      static constexpr int digits10 = 0;
      static constexpr bool is_signed = false;
      static constexpr bool is_integer = false;
      static constexpr bool is_exact = false;
      static constexpr int radix = 0;
      static constexpr T epsilon() noexcept { return T(); }
      static constexpr T round_error() noexcept { return T(); }

      static constexpr int min_exponent = 0;
      static constexpr int min_exponent10 = 0;
      static constexpr int max_exponent = 0;
      static constexpr int max_exponent10 = 0;

      static constexpr bool has_infinity = false;
      static constexpr bool has_quiet_NaN = false;
      static constexpr bool has_signaling_NaN = false;
      static constexpr float_denorm_style has_denorm = denorm_absent;
      static constexpr bool has_denorm_loss = false;
      static constexpr T infinity() noexcept { return T(); }
      static constexpr T quiet_NaN() noexcept { return T(); }
      static constexpr T signaling_NaN() noexcept { return T(); }
      static constexpr T denorm_min() noexcept { return T(); }

      static constexpr bool is_iec559 = false;
      static constexpr bool is_bounded = false;
      static constexpr bool is_modulo = false;

      static constexpr bool traps = false;
      static constexpr bool tinyness_before = false;
};