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 |
É true para todos (ou seja, aqueles para os quaisnumeric_limitsé especializado). e false para 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 |
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 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 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 |
true se 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 |
is_iec559 | bool |
Um tipo IEC-559 sempre tem has_infinity, has_quiet_NaN e has_signaling_NaNdefinido como |
is_bounded | bool |
true se o conjunto de valores representado pelo tipo for finito. |
is_modulo | bool |
true se 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;
};