Compartilhar via


Classe numeric_limits

O modelo de classe descreve propriedades aritméticas de tipos numéricos internos.

Sintaxe

template <class Type>
    class numeric_limits

Parâmetros

Tipo
O tipo de dados do elemento fundamental cujas propriedades estão sendo testadas ou consultadas ou definidas. Tipo também pode ser declarado const, volatile ou const volatile.

Comentários

O cabeçalho define as especializações explícitas para os tipos wchar_t, bool, char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, long long, unsigned long long, char16_t e char32_t. Para essas especializações explícitas, o membro numeric_limits::is_specialized é true e todos os membros relevantes têm valores significativos. O programa pode fornecer especializações explícitas adicionais. A maioria das funções membro da classe descreve ou testa possíveis implementações de float.

Para uma especialização arbitrária, nenhum membro tem valores significativos. Um objeto membro que não tem um valor significativo armazena zero (ou false) e retorna uma função membro que não retorna um valor significativo Type(0).

Constantes e funções estáticas

Nome Descrição
denorm_min Retorna o menor valor desnormalizado diferente de zero.
digits Retorna o número de dígitos de base que o tipo pode representar sem perda de precisão.
digits10 Retorna o número de dígitos decimais que o tipo pode representar sem perda de precisão.
epsilon Retorna a diferença entre 1 e o menor valor maior que 1 que o tipo de dados pode representar.
has_denorm Testa se um tipo permite valores desnormalizados.
has_denorm_loss Testa se a perda de precisão é detectada como uma perda de desnormalização em vez de um resultado inexato.
has_infinity Testa se um tipo tem uma representação de infinito positivo.
has_quiet_NaN Testa se um tipo tem uma representação de um silencioso NAN (não é um número), que é sem sinal.
has_signaling_NaN Testa se um tipo tem uma representação para não sinalizar um número (NAN).
infinity A representação de infinito positivo para um tipo, se disponível.
is_bounded Testa se o conjunto de valores que um tipo pode representar é finito.
is_exact Testa se os cálculos feitos em um tipo estão livres de erros de arredondamento.
is_iec559 Testa se um tipo está em conformidade com os padrões IEC 559.
is_integer Testa se um tipo tem uma representação de inteiro.
is_modulo Testa se um tipo tem uma representação de módulo.
is_signed Testa se um tipo tem uma representação com sinal.
is_specialized Testa se um tipo tem uma especialização explícita definida no modelo de classe numeric_limits.
lowest Retorna o valor finito mais negativo.
max Retorna o valor máximo finito para um tipo.
max_digits10 Retorna o número de dígitos decimais necessários para garantir que dois valores distintos do tipo tenham diferentes representações decimais.
max_exponent Retorna o expoente integral positivo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de base é elevada a essa potência.
max_exponent10 Retorna o expoente integral positivo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de dez é elevada a essa potência.
min Retorna o valor normalizado mínimo para um tipo.
min_exponent Retorna o expoente integral negativo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de base é elevada a essa potência.
min_exponent10 Retorna o expoente integral negativo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de dez é elevada a essa potência.
quiet_NaN Retorna a representação de um NAN (não é um número) silencioso para o tipo.
radix Retorna a base integral, conhecida como base, usada para a representação de um tipo.
round_error Retorna o erro de arredondamento máximo para o tipo.
round_style Retorna um valor que descreve os vários métodos que uma implementação pode escolher para o arredondamento de um valor de ponto flutuante para um valor inteiro.
signaling_NaN Retorna a representação de um sinal NAN (não é um número) para o tipo.
tinyness_before Testa se um tipo pode determinar que um valor é muito pequeno para representar como um valor normalizado antes de arredondá-lo.
traps Testa se o trapping que relata exceções aritméticas é implementada para um tipo.

denorm_min

Retorna o menor valor desnormalizado diferente de zero.

static constexpr Type denorm_min() throw();

Valor de retorno

O menor valor desnormalizado diferente de zero.

Comentários

long double é o mesmo que double para o compilador C++.

A função retornará o valor mínimo para o tipo, que é o mesmo que min se has_denorm não for igual a denorm_present.

Exemplo

// numeric_limits_denorm_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The smallest nonzero denormalized value" << endl
        << "for float objects is: "
        << numeric_limits<float>::denorm_min( ) << endl;
   cout << "The smallest nonzero denormalized value" << endl
        << "for double objects is: "
        << numeric_limits<double>::denorm_min( ) << endl;
   cout << "The smallest nonzero denormalized value" << endl
        << "for long double objects is: "
        << numeric_limits<long double>::denorm_min( ) << endl;

   // A smaller value will round to zero
   cout << numeric_limits<float>::denorm_min( )/2 <<endl;
   cout << numeric_limits<double>::denorm_min( )/2 <<endl;
   cout << numeric_limits<long double>::denorm_min( )/2 <<endl;
}
The smallest nonzero denormalized value
for float objects is: 1.4013e-045
The smallest nonzero denormalized value
for double objects is: 4.94066e-324
The smallest nonzero denormalized value
for long double objects is: 4.94066e-324
0
0
0

dígitos

Retorna o número de dígitos de base que o tipo pode representar sem perda de precisão.

static constexpr int digits = 0;

Valor de retorno

O número de dígitos de base que o tipo pode representar sem perda de precisão.

Comentários

O membro armazena o número de dígitos de base que o tipo pode representar sem alteração, que é o número de bits diferente de qualquer bit de sinal para um tipo inteiro predefinido ou o número de dígitos de mantissa para um tipo de ponto flutuante predefinido.

Exemplo

// numeric_limits_digits_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << numeric_limits<float>::digits <<endl;
   cout << numeric_limits<double>::digits <<endl;
   cout << numeric_limits<long double>::digits <<endl;
   cout << numeric_limits<int>::digits <<endl;
   cout << numeric_limits<__int64>::digits <<endl;
}
24
53
53
31
63

digits10

Retorna o número de dígitos decimais que o tipo pode representar sem perda de precisão.

static constexpr int digits10 = 0;

Valor de retorno

O número de dígitos decimais que o tipo pode representar sem perda de precisão.

Exemplo

// numeric_limits_digits10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << numeric_limits<float>::digits10 <<endl;
   cout << numeric_limits<double>::digits10 <<endl;
   cout << numeric_limits<long double>::digits10 <<endl;
   cout << numeric_limits<int>::digits10 <<endl;
   cout << numeric_limits<__int64>::digits10 <<endl;
   float f = (float)99999999;
   cout.precision ( 10 );
   cout << "The float is; " << f << endl;
}
6
15
15
9
18
The float is; 100000000

épsilon

A função retorna a diferença entre 1 e o menor valor maior que 1 que é representável para o tipo de dados.

static constexpr Type epsilon() throw();

Valor de retorno

A diferença entre 1 e o menor valor maior que 1 que é representável para o tipo de dados.

Comentários

O valor é FLT_EPSILON para o tipo float. epsilon para um tipo é o menor número de ponto flutuante positivo N que N + epsilon + N é representável.

Exemplo

// numeric_limits_epsilon.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The difference between 1 and the smallest "
        << "value greater than 1" << endl
        << "for float objects is: "
        << numeric_limits<float>::epsilon( ) << endl;
   cout << "The difference between 1 and the smallest "
        << "value greater than 1" << endl
        << "for double objects is: "
        << numeric_limits<double>::epsilon( ) << endl;
   cout << "The difference between 1 and the smallest "
        << "value greater than 1" << endl
        << "for long double objects is: "
        << numeric_limits<long double>::epsilon( ) << endl;
}
The difference between 1 and the smallest value greater than 1
for float objects is: 1.19209e-007
The difference between 1 and the smallest value greater than 1
for double objects is: 2.22045e-016
The difference between 1 and the smallest value greater than 1
for long double objects is: 2.22045e-016

has_denorm

Testa se um tipo permite valores desnormalizados.

static constexpr float_denorm_style has_denorm = denorm_absent;

Valor de retorno

Um valor de enumeração do tipo const float_denorm_style, indicando se o tipo permite valores desnormalizados.

Comentários

Os repositórios do membro denorm_present para um tipo de ponto flutuante com valores desnormalizados, efetivamente um número variável de bits exponenciais.

Exemplo

// numeric_limits_has_denorm.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects allow denormalized values: "
        << numeric_limits<float>::has_denorm
        << endl;
   cout << "Whether double objects allow denormalized values: "
        << numeric_limits<double>::has_denorm
        << endl;
   cout << "Whether long int objects allow denormalized values: "
        << numeric_limits<long int>::has_denorm
        << endl;
}
Whether float objects allow denormalized values: 1
Whether double objects allow denormalized values: 1
Whether long int objects allow denormalized values: 0

has_denorm_loss

Testa se a perda de precisão é detectada como uma perda de desnormalização em vez de um resultado inexato.

static constexpr bool has_denorm_loss = false;

Valor de retorno

true se a perda de precisão for detectada como uma perda de desnormalização; false se não for.

Comentários

O membro armazena true para um tipo que determina se um valor perdeu a precisão porque foi entregue como um resultado desnormalizado (muito pequeno para ser representado como um valor normalizado) ou porque está inexato (não o mesmo por não estar sujeito a limitações de intervalo exponencial e precisão), uma opção com representações de ponto flutuantes IEC 559 que pode afetar alguns resultados.

Exemplo

// numeric_limits_has_denorm_loss.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects can detect denormalized loss: "
        << numeric_limits<float>::has_denorm_loss
        << endl;
   cout << "Whether double objects can detect denormalized loss: "
        << numeric_limits<double>::has_denorm_loss
        << endl;
   cout << "Whether long int objects can detect denormalized loss: "
        << numeric_limits<long int>::has_denorm_loss
        << endl;
}
Whether float objects can detect denormalized loss: 1
Whether double objects can detect denormalized loss: 1
Whether long int objects can detect denormalized loss: 0

has_infinity

Testa se um tipo tem uma representação de infinito positivo.

static constexpr bool has_infinity = false;

Valor de retorno

true se o tipo tiver uma representação de infinito positivo; false se não tiver.

Comentários

O membro retornará true se is_iec559 for true.

Exemplo

// numeric_limits_has_infinity.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have infinity: "
        << numeric_limits<float>::has_infinity
        << endl;
   cout << "Whether double objects have infinity: "
        << numeric_limits<double>::has_infinity
        << endl;
   cout << "Whether long int objects have infinity: "
        << numeric_limits<long int>::has_infinity
        << endl;
}
Whether float objects have infinity: 1
Whether double objects have infinity: 1
Whether long int objects have infinity: 0

has_quiet_NaN

Testa se um tipo tem uma representação de um silencioso NAN (não é um número), que é sem sinal.

static constexpr bool has_quiet_NaN = false;

Valor de retorno

true se o tipo tiver uma representação de NAN silencioso; false se não tiver.

Comentários

Um NAN silencioso é uma codificação para um não número, o que não indica sua presença em uma expressão. O valor retornado será true se is_iec559 for true.

Exemplo

// numeric_limits_has_quiet_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have quiet_NaN: "
        << numeric_limits<float>::has_quiet_NaN
        << endl;
   cout << "Whether double objects have quiet_NaN: "
        << numeric_limits<double>::has_quiet_NaN
        << endl;
   cout << "Whether long int objects have quiet_NaN: "
        << numeric_limits<long int>::has_quiet_NaN
        << endl;
}
Whether float objects have quiet_NaN: 1
Whether double objects have quiet_NaN: 1
Whether long int objects have quiet_NaN: 0

has_signaling_NaN

Testa se um tipo tem uma representação para não sinalizar um número (NAN).

static constexpr bool has_signaling_NaN = false;

Valor de retorno

true se o tipo tiver uma representação de um NAN com sinal; false se não tiver.

Comentários

Um NAN com sinal é uma codificação para um não número, o que indica sua presença em uma expressão. O valor retornado será true se is_iec559 for true.

Exemplo

// numeric_limits_has_signaling_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have a signaling_NaN: "
        << numeric_limits<float>::has_signaling_NaN
        << endl;
   cout << "Whether double objects have a signaling_NaN: "
        << numeric_limits<double>::has_signaling_NaN
        << endl;
   cout << "Whether long int objects have a signaling_NaN: "
        << numeric_limits<long int>::has_signaling_NaN
        << endl;
}
Whether float objects have a signaling_NaN: 1
Whether double objects have a signaling_NaN: 1
Whether long int objects have a signaling_NaN: 0

infinity

A representação de infinito positivo para um tipo, se disponível.

static constexpr Type infinity() throw();

Valor de retorno

A representação de infinito positivo para um tipo, se disponível.

Comentários

O valor retornado será significativo somente se has_infinity for true.

Exemplo

// numeric_limits_infinity.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << numeric_limits<float>::has_infinity <<endl;
   cout << numeric_limits<double>::has_infinity<<endl;
   cout << numeric_limits<long double>::has_infinity <<endl;
   cout << numeric_limits<int>::has_infinity <<endl;
   cout << numeric_limits<__int64>::has_infinity <<endl;

   cout << "The representation of infinity for type float is: "
        << numeric_limits<float>::infinity( ) <<endl;
   cout << "The representation of infinity for type double is: "
        << numeric_limits<double>::infinity( ) <<endl;
   cout << "The representation of infinity for type long double is: "
        << numeric_limits<long double>::infinity( ) <<endl;
}
1
1
1
0
0
The representation of infinity for type float is: inf
The representation of infinity for type double is: inf
The representation of infinity for type long double is: inf

is_bounded

Testa se o conjunto de valores que um tipo pode representar é finito.

static constexpr bool is_bounded = false;

Valor de retorno

true se o tipo tiver um conjunto limitado de valores representáveis; false se não tiver.

Comentários

Todos os tipos predefinidos têm um conjunto limitado de valores representáveis e retornam true.

Exemplo

// numeric_limits_is_bounded.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have bounded set "
        << "of representable values: "
        << numeric_limits<float>::is_bounded
        << endl;
   cout << "Whether double objects have bounded set "
        << "of representable values: "
        << numeric_limits<double>::is_bounded
        << endl;
   cout << "Whether long int objects have bounded set "
        << "of representable values: "
        << numeric_limits<long int>::is_bounded
        << endl;
   cout << "Whether unsigned char objects have bounded set "
        << "of representable values: "
        << numeric_limits<unsigned char>::is_bounded
        << endl;
}
Whether float objects have bounded set of representable values: 1
Whether double objects have bounded set of representable values: 1
Whether long int objects have bounded set of representable values: 1
Whether unsigned char objects have bounded set of representable values: 1

is_exact

Testa se os cálculos feitos em um tipo estão livres de erros de arredondamento.

static constexpr bool is_exact = false;

Valor de retorno

true se os cálculos estiverem livres de erros de arredondamento; false se não estiverem.

Comentários

Todos os tipos de inteiro predefinidos têm representações exatas para seus valores e retornam false. Uma representação de ponto fixo ou racional também é considerada exata, mas uma representação de ponto flutuante não é.

Exemplo

// numeric_limits_is_exact.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have calculations "
        << "free of rounding errors: "
        << numeric_limits<float>::is_exact
        << endl;
   cout << "Whether double objects have calculations "
        << "free of rounding errors: "
        << numeric_limits<double>::is_exact
        << endl;
   cout << "Whether long int objects have calculations "
        << "free of rounding errors: "
        << numeric_limits<long int>::is_exact
        << endl;
   cout << "Whether unsigned char objects have calculations "
        << "free of rounding errors: "
        << numeric_limits<unsigned char>::is_exact
        << endl;
}
Whether float objects have calculations free of rounding errors: 0
Whether double objects have calculations free of rounding errors: 0
Whether long int objects have calculations free of rounding errors: 1
Whether unsigned char objects have calculations free of rounding errors: 1

is_iec559

Testa se um tipo está em conformidade com os padrões IEC 559.

static constexpr bool is_iec559 = false;

Valor de retorno

true se o tipo estiver em conformidade com os padrões IEC 559; false se não estiver.

Comentários

O IEC 559 é um padrão internacional que representa valores de ponto flutuante e também é conhecido como IEEE 754 nos EUA.

Exemplo

// numeric_limits_is_iec559.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects conform to iec559 standards: "
        << numeric_limits<float>::is_iec559
        << endl;
   cout << "Whether double objects conform to iec559 standards: "
        << numeric_limits<double>::is_iec559
        << endl;
   cout << "Whether int objects conform to iec559 standards: "
        << numeric_limits<int>::is_iec559
        << endl;
   cout << "Whether unsigned char objects conform to iec559 standards: "
        << numeric_limits<unsigned char>::is_iec559
        << endl;
}
Whether float objects conform to iec559 standards: 1
Whether double objects conform to iec559 standards: 1
Whether int objects conform to iec559 standards: 0
Whether unsigned char objects conform to iec559 standards: 0

is_integer

Testa se um tipo tem uma representação de inteiro.

static constexpr bool is_integer = false;

Valor de retorno

true se o tipo tiver uma representação de inteiro; false se não tiver.

Comentários

Todos os tipos de inteiro predefinidos têm uma representação de inteiro.

Exemplo

// numeric_limits_is_integer.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have an integral representation: "
        << numeric_limits<float>::is_integer
        << endl;
   cout << "Whether double objects have an integral representation: "
        << numeric_limits<double>::is_integer
        << endl;
   cout << "Whether int objects have an integral representation: "
        << numeric_limits<int>::is_integer
        << endl;
   cout << "Whether unsigned char objects have an integral representation: "
        << numeric_limits<unsigned char>::is_integer
        << endl;
}
Whether float objects have an integral representation: 0
Whether double objects have an integral representation: 0
Whether int objects have an integral representation: 1
Whether unsigned char objects have an integral representation: 1

is_modulo

Testa se um tipo tem uma representação de módulo.

static constexpr bool is_modulo = false;

Valor de retorno

true se o tipo tiver uma representação de módulo; false se não tiver.

Comentários

Uma representação de módulo é uma representação na qual todos os resultados são reduzidos a um módulo de algum valor. Todos os tipos de inteiro sem sinal predefinidos têm uma representação de módulo.

Exemplo

// numeric_limits_is_modulo.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have a modulo representation: "
        << numeric_limits<float>::is_modulo
        << endl;
   cout << "Whether double objects have a modulo representation: "
        << numeric_limits<double>::is_modulo
        << endl;
   cout << "Whether signed char objects have a modulo representation: "
        << numeric_limits<signed char>::is_modulo
        << endl;
   cout << "Whether unsigned char objects have a modulo representation: "
        << numeric_limits<unsigned char>::is_modulo
        << endl;
}
Whether float objects have a modulo representation: 0
Whether double objects have a modulo representation: 0
Whether signed char objects have a modulo representation: 1
Whether unsigned char objects have a modulo representation: 1

is_signed

Testa se um tipo tem uma representação com sinal.

static constexpr bool is_signed = false;

Valor de retorno

true se o tipo tiver uma representação assinada; false se não tiver.

Comentários

O membro armazena true para um tipo que tem uma representação com sinal, que é o caso para todos os tipos de inteiros com sinal e de ponto flutuante predefinidos.

Exemplo

// numeric_limits_is_signaled.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have a signed representation: "
        << numeric_limits<float>::is_signed
        << endl;
   cout << "Whether double objects have a signed representation: "
        << numeric_limits<double>::is_signed
        << endl;
   cout << "Whether signed char objects have a signed representation: "
        << numeric_limits<signed char>::is_signed
        << endl;
   cout << "Whether unsigned char objects have a signed representation: "
        << numeric_limits<unsigned char>::is_signed
        << endl;
}
Whether float objects have a signed representation: 1
Whether double objects have a signed representation: 1
Whether signed char objects have a signed representation: 1
Whether unsigned char objects have a signed representation: 0

is_specialized

Testa se um tipo tem uma especialização explícita definida no modelo de classe numeric_limits.

static constexpr bool is_specialized = false;

Valor de retorno

true se um tipo tiver uma especialização explícita definida no modelo de classe; false se não tiver.

Comentários

Todos os tipos escalares, exceto ponteiros, têm uma especialização explícita definida para o modelo de classe numeric_limits.

Exemplo

// numeric_limits_is_specialized.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float objects have an explicit "
        << "specialization in the class: "
        << numeric_limits<float>::is_specialized
        << endl;
   cout << "Whether float* objects have an explicit "
        << "specialization in the class: "
        << numeric_limits<float*>::is_specialized
        << endl;
   cout << "Whether int objects have an explicit "
        << "specialization in the class: "
        << numeric_limits<int>::is_specialized
        << endl;
   cout << "Whether int* objects have an explicit "
        << "specialization in the class: "
        << numeric_limits<int*>::is_specialized
        << endl;
}
Whether float objects have an explicit specialization in the class: 1
Whether float* objects have an explicit specialization in the class: 0
Whether int objects have an explicit specialization in the class: 1
Whether int* objects have an explicit specialization in the class: 0

mais baixo

Retorna o valor finito mais negativo.

static constexpr Type lowest() throw();

Valor de retorno

Retorna o valor finito mais negativo.

Comentários

Retorna o valor finito mais negativo para o tipo (que geralmente é min() para tipos de inteiro e -max() para tipos de ponto flutuante). O valor de retorno será significativo se is_bounded for true.

max

Retorna o valor máximo finito para um tipo.

static constexpr Type max() throw();

Valor de retorno

O valor máximo finito para um tipo.

Comentários

O valor máximo finito é INT_MAX para o tipo int e FLT_MAX para o tipo float. O valor retornado será significativo se is_bounded for true.

Exemplo

// numeric_limits_max.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main() {
   cout << "The maximum value for type float is:  "
        << numeric_limits<float>::max( )
        << endl;
   cout << "The maximum value for type double is:  "
        << numeric_limits<double>::max( )
        << endl;
   cout << "The maximum value for type int is:  "
        << numeric_limits<int>::max( )
        << endl;
   cout << "The maximum value for type short int is:  "
        << numeric_limits<short int>::max( )
        << endl;
}

max_digits10

Retorna o número de dígitos decimais necessários para garantir que dois valores distintos do tipo tenham diferentes representações decimais.

static constexpr int max_digits10 = 0;

Valor de retorno

Retorna o número de dígitos decimais necessários para garantir que dois valores distintos do tipo tenham diferentes representações decimais.

Comentários

O membro armazena o número de dígitos decimais necessários para garantir que dois valores distintos do tipo tenham diferentes representações decimais.

max_exponent

Retorna o expoente integral positivo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de base é elevada a essa potência.

static constexpr int max_exponent = 0;

Valor de retorno

O expoente com base integral máximo representável pelo tipo.

Comentários

O retorno da função membro é significativo apenas para os tipos de ponto flutuante. O max_exponent é o valor FLT_MAX_EXP para o tipo float.

Exemplo

// numeric_limits_max_exponent.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The maximum radix-based exponent for type float is:  "
        << numeric_limits<float>::max_exponent
        << endl;
   cout << "The maximum radix-based exponent for type double is:  "
        << numeric_limits<double>::max_exponent
        << endl;
   cout << "The maximum radix-based exponent for type long double is:  "
        << numeric_limits<long double>::max_exponent
        << endl;
}
The maximum radix-based exponent for type float is:  128
The maximum radix-based exponent for type double is:  1024
The maximum radix-based exponent for type long double is:  1024

max_exponent10

Retorna o expoente integral positivo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de dez é elevada a essa potência.

static constexpr int max_exponent10 = 0;

Valor de retorno

O expoente de base 10 integral máxima representável pelo tipo.

Comentários

O retorno da função membro é significativo apenas para os tipos de ponto flutuante. O max_exponent é o valor FLT_MAX_10 para o tipo float.

Exemplo

// numeric_limits_max_exponent10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The maximum base 10 exponent for type float is:  "
           << numeric_limits<float>::max_exponent10
           << endl;
   cout << "The maximum base 10 exponent for type double is:  "
           << numeric_limits<double>::max_exponent10
           << endl;
   cout << "The maximum base 10 exponent for type long double is:  "
           << numeric_limits<long double>::max_exponent10
           << endl;
}
The maximum base 10 exponent for type float is:  38
The maximum base 10 exponent for type double is:  308
The maximum base 10 exponent for type long double is:  308

min

Retorna o valor normalizado mínimo para um tipo.

static constexpr Type min() throw();

Valor de retorno

O valor normalizado mínimo para o tipo.

Comentários

O valor normalizado mínimo é INT_MIN para o tipo int e FLT_MIN para o tipo float. O valor retornado será significativo se is_bounded for true ou se is_signed for false.

Exemplo

// numeric_limits_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The minimum value for type float is:  "
        << numeric_limits<float>::min( )
        << endl;
   cout << "The minimum value for type double is:  "
        << numeric_limits<double>::min( )
        << endl;
   cout << "The minimum value for type int is:  "
        << numeric_limits<int>::min( )
        << endl;
   cout << "The minimum value for type short int is:  "
        << numeric_limits<short int>::min( )
        << endl;
}
The minimum value for type float is:  1.17549e-038
The minimum value for type double is:  2.22507e-308
The minimum value for type int is:  -2147483648
The minimum value for type short int is:  -32768

min_exponent

Retorna o expoente integral negativo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de base é elevada a essa potência.

static constexpr int min_exponent = 0;

Valor de retorno

O expoente com base integral mínima representável pelo tipo.

Comentários

A função membro é significativa apenas para os tipos de ponto flutuante. O min_exponent é o valor FLT_MIN_EXP para o tipo float.

Exemplo

// numeric_limits_min_exponent.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The minimum radix-based exponent for type float is:  "
        << numeric_limits<float>::min_exponent
        << endl;
   cout << "The minimum radix-based exponent for type double is:  "
        << numeric_limits<double>::min_exponent
        << endl;
   cout << "The minimum radix-based exponent for type long double is:  "
         << numeric_limits<long double>::min_exponent
        << endl;
}
The minimum radix-based exponent for type float is:  -125
The minimum radix-based exponent for type double is:  -1021
The minimum radix-based exponent for type long double is:  -1021

min_exponent10

Retorna o expoente integral negativo máximo que o tipo de ponto flutuante pode representar como um valor finito quando uma base de dez é elevada a essa potência.

static constexpr int min_exponent10 = 0;

Valor de retorno

O expoente de base 10 integral mínimo representável pelo tipo.

Comentários

A função membro é significativa apenas para os tipos de ponto flutuante. O min_exponent10 é o valor FLT_MIN_10_EXP para o tipo float.

Exemplo

// numeric_limits_min_exponent10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The minimum base 10 exponent for type float is:  "
        << numeric_limits<float>::min_exponent10
        << endl;
   cout << "The minimum base 10 exponent for type double is:  "
        << numeric_limits<double>::min_exponent10
        << endl;
   cout << "The minimum base 10 exponent for type long double is:  "
        << numeric_limits<long double>::min_exponent10
        << endl;
}
The minimum base 10 exponent for type float is:  -37
The minimum base 10 exponent for type double is:  -307
The minimum base 10 exponent for type long double is:  -307

quiet_NaN

Retorna a representação de um NAN (não é um número) silencioso para o tipo.

static constexpr Type quiet_NaN() throw();

Valor de retorno

A representação de um NAN silencioso para o tipo.

Comentários

O valor retornado será significativo somente se has_quiet_NaN for true.

Exemplo

// numeric_limits_quiet_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The quiet NaN for type float is:  "
        << numeric_limits<float>::quiet_NaN( )
        << endl;
   cout << "The quiet NaN for type int is:  "
        << numeric_limits<int>::quiet_NaN( )
        << endl;
   cout << "The quiet NaN for type long double is:  "
        << numeric_limits<long double>::quiet_NaN( )
        << endl;
}
The quiet NaN for type float is:  1.#QNAN
The quiet NaN for type int is:  0
The quiet NaN for type long double is:  1.#QNAN

radix

Retorna a base integral, conhecida como base, usada para a representação de um tipo.

static constexpr int radix = 0;

Valor de retorno

A base integral para a representação do tipo.

Comentários

A base é 2 para os tipos de inteiro predefinidos e para a base para a qual o expoente é elevado ou FLT_RADIX, para os tipos de pontos flutuantes predefinidos.

Exemplo

// numeric_limits_radix.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The base for type float is:  "
        << numeric_limits<float>::radix
        << endl;
   cout << "The base for type int is:  "
        << numeric_limits<int>::radix
        << endl;
   cout << "The base for type long double is:  "
        << numeric_limits<long double>::radix
        << endl;
}
The base for type float is:  2
The base for type int is:  2
The base for type long double is:  2

round_error

Retorna o erro de arredondamento máximo para o tipo.

static constexpr Type round_error() throw();

Valor de retorno

O erro de arredondamento máximo para o tipo.

Exemplo

// numeric_limits_round_error.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The maximum rounding error for type float is:  "
        << numeric_limits<float>::round_error( )
        << endl;
   cout << "The maximum rounding error for type int is:  "
        << numeric_limits<int>::round_error( )
        << endl;
   cout << "The maximum rounding error for type long double is:  "
        << numeric_limits<long double>::round_error( )
        << endl;
}
The maximum rounding error for type float is:  0.5
The maximum rounding error for type int is:  0
The maximum rounding error for type long double is:  0.5

round_style

Retorna um valor que descreve os vários métodos que uma implementação pode escolher para o arredondamento de um valor de ponto flutuante para um valor inteiro.

static constexpr float_round_style round_style = round_toward_zero;

Valor de retorno

Um valor da enumeração float_round_style que descreve o estilo de arredondamento.

Comentários

O membro armazena um valor que descreve os vários métodos que uma implementação pode escolher para o arredondamento de um valor de ponto flutuante para um valor inteiro.

O estilo de arredondamento fixo é nessa implementação. Mesmo que se o programa for iniciado com um modo de arredondamento diferente, esse valor não será alterado.

Exemplo

// numeric_limits_round_style.cpp
// compile with: /EHsc
#include <iostream>
#include <float.h>
#include <limits>

using namespace std;

int main( )
{
   cout << "The rounding style for a double type is: "
        << numeric_limits<double>::round_style << endl;
   _controlfp_s(NULL,_RC_DOWN,_MCW_RC );
   cout << "The rounding style for a double type is now: "
        << numeric_limits<double>::round_style << endl;
   cout << "The rounding style for an int type is: "
        << numeric_limits<int>::round_style << endl;
}
The rounding style for a double type is: 1
The rounding style for a double type is now: 1
The rounding style for an int type is: 0

signaling_NaN

Retorna a representação de um sinal NAN (não é um número) para o tipo.

static constexpr Type signaling_NaN() throw();

Valor de retorno

A representação de um NAN com sinal para o tipo.

Comentários

O valor retornado será significativo somente se has_signaling_NaN for true.

Exemplo

// numeric_limits_signaling_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "The signaling NaN for type float is:  "
        << numeric_limits<float>::signaling_NaN( )
        << endl;
   cout << "The signaling NaN for type int is:  "
        << numeric_limits<int>::signaling_NaN( )
        << endl;
   cout << "The signaling NaN for type long double is:  "
        << numeric_limits<long double>::signaling_NaN( )
        << endl;
}

tinyness_before

Testa se um tipo pode determinar que um valor é muito pequeno para representar como um valor normalizado antes de arredondá-lo.

static constexpr bool tinyness_before = false;

Valor de retorno

true se o tipo puder detectar valores pequenos antes do arredondamento; false se não puder.

Comentários

Tipos que podem detectar pequenez foram incluídos como uma opção com representações de pontos flutuantes IEC 559 e sua implementação pode afetar alguns resultados.

Exemplo

// numeric_limits_tinyness_before.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float types can detect tinyness before rounding: "
        << numeric_limits<float>::tinyness_before
        << endl;
   cout << "Whether double types can detect tinyness before rounding: "
        << numeric_limits<double>::tinyness_before
        << endl;
   cout << "Whether long int types can detect tinyness before rounding: "
        << numeric_limits<long int>::tinyness_before
        << endl;
   cout << "Whether unsigned char types can detect tinyness before rounding: "
        << numeric_limits<unsigned char>::tinyness_before
        << endl;
}
Whether float types can detect tinyness before rounding: 1
Whether double types can detect tinyness before rounding: 1
Whether long int types can detect tinyness before rounding: 0
Whether unsigned char types can detect tinyness before rounding: 0

interceptações

Testa se o trapping que relata exceções aritméticas é implementada para um tipo.

static constexpr bool traps = false;

Valor de retorno

true se trapping for implementado para o tipo; false se não for.

Exemplo

// numeric_limits_traps.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>

using namespace std;

int main( )
{
   cout << "Whether float types have implemented trapping: "
        << numeric_limits<float>::traps
        << endl;
   cout << "Whether double types have implemented trapping: "
        << numeric_limits<double>::traps
        << endl;
   cout << "Whether long int types have implemented trapping: "
        << numeric_limits<long int>::traps
        << endl;
   cout << "Whether unsigned char types have implemented trapping: "
        << numeric_limits<unsigned char>::traps
        << endl;
}
Whether float types have implemented trapping: 1
Whether double types have implemented trapping: 1
Whether long int types have implemented trapping: 0
Whether unsigned char types have implemented trapping: 0