Libreria C ++ - <limiti>

introduzione

È un tipo di limiti numerici e fornisce informazioni sulle proprietà dei tipi aritmetici (integrali o in virgola mobile) nella piattaforma specifica per la quale viene compilata la libreria.

Dichiarazione

Di seguito è riportata la dichiarazione per std :: numeric_limits.

template <class T> numeric_limits;

C ++ 11

template <class T> numeric_limits;

Parametri

T - È un tipo di lezione.

Esempio

Nell'esempio seguente per 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';
}

L'output di esempio dovrebbe essere così:

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

Istanze di modelli

I tipi aritmetici fondamentali di C ++ 98 dovrebbero essere così:

tipi aritmetici fondamentali
tipi integrali bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
tipi in virgola mobile float
double
long double

I tipi aritmetici fondamentali di C ++ 11 dovrebbero essere così:

tipi aritmetici fondamentali
tipi integrali 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
tipi in virgola mobile float
double
long double

Membri

membro genere proprietà
è_specializzato bool È trueper tutti (cioè quelli per i qualinumeric_limitsè specializzato). e falseper tutti gli altri tipi.
min () T

È un valore finito minimo.

Per i tipi floating con denormalizzazione (numero variabile di bit esponenti): valore normalizzato positivo minimo.

Equivalente a CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINo 0, a seconda del tipo.

max () T

È un valore finito massimo.

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 o LDBL_MAX, a seconda del tipo.

più basso () T

È un valore finito minimo. (da C ++ 11)

Per i tipi integrali: lo stesso di min ().

Per i tipi a virgola mobile: dipendente dall'implementazione; generalmente, il negativo dimax ().

cifre int

È per i tipi interi: numero di bit senza segno ( cifre di base della radice ) nella rappresentazione.

Per i tipi mobili: numero di cifre (in base radice ) nella mantissa (equivalente aFLT_MANT_DIG, DBL_MANT_DIG o LDBL_MANT_DIG).

cifre10 int

È un numero di cifre (in base decimale), che può essere rappresentato senza modifiche.

Equivalente a FLT_DIG, DBL_DIG o LDBL_DIG per i tipi galleggianti.

max_digits10 int È un numero di cifre (in base decimale), quello richiesto per garantire che i valori che differiscono siano sempre differenziati.
is_signed bool true se il tipo è firmato.
is_integer bool true se il tipo è intero.
is_exact bool true se il tipo usa rappresentazioni esatte.
radix int

È per i tipi interi: base della rappresentazione.

Per i tipi flottanti: base dell'esponente della rappresentazione (equivalente a FLT_RADIX).

epsilon() T

È una macchina epsilon (la differenza tra 1 e il valore minimo maggiore di 1 che è rappresentabile).

Equivalente a FLT_EPSILON, DBL_EPSILON o LDBL_EPSILON per i tipi galleggianti.

round_error () T Misura l'errore massimo di arrotondamento.
min_exponent int

È un valore intero negativo minimo tale che la radice sollevata per (min_exponent-1)generi un numero a virgola mobile normalizzato.

Equivalente a FLT_MIN_EXP, DBL_MIN_EXP o LDBL_MIN_EXP per i tipi galleggianti.

min_exponent10 int

È un valore intero negativo minimo tale che 10 elevato a quella potenza genera un numero in virgola mobile normalizzato.

Equivalente a FLT_MIN_10_EXP, DBL_MIN_10_EXP o LDBL_MIN_10_EXP per i tipi galleggianti.

max_exponent int

È un valore intero massimo tale che la radice sollevata per (max_exponent-1)generi un numero a virgola mobile finito rappresentabile.

Equivalente a FLT_MAX_EXP, DBL_MAX_EXP o LDBL_MAX_EXP per i tipi galleggianti.

max_exponent10 int

È un valore intero massimo tale che 10 elevato a quella potenza genera un numero a virgola mobile finito normalizzato.

Equivalente a FLT_MAX_10_EXP, DBL_MAX_10_EXP o LDBL_MAX_10_EXP per i tipi galleggianti.

has_infinity bool true se il tipo ha una rappresentazione per l'infinito positivo.
has_quiet_NaN bool true se il tipo ha una rappresentazione per un "Non-Numero" silenzioso (non segnalante).
has_signaling_NaN bool true se il tipo ha una rappresentazione per una segnalazione "Not-a-Number".
has_denorm float_denorm_style

È un valore denormalizzato (rappresentazioni con un numero variabile di bit esponenti). Un tipo può avere uno dei seguenti valori enum:

denorm_absent, se non consente valori denormalizzati.

denorm_present, se consente valori denormalizzati.

denorm_indeterminate, se indeterminato in fase di compilazione.

has_denorm_loss bool truese una perdita di accuratezza viene rilevata come una perdita di denormalizzazione, piuttosto che un risultato inesatto.
infinito() T Rappresenta l' infinito positivo , se disponibile.
quiet_NaN () T Rappresenta un "Non-Numero" silenzioso (non di segnalazione) , se disponibile.
signaling_NaN () T Rappresenta la segnalazione "Not-a-Number" , se disponibile.
denorm_min () T

Valore denormalizzato positivo minimo.

È per i tipi che non consentono valori denormalizzati: uguale a min().

is_iec559 bool

true se il tipo è conforme allo standard IEC-559 / IEEE-754.

Un tipo IEC-559 lo ha sempre fatto has_infinity, has_quiet_NaN e has_signaling_NaNimpostato su true; Einfinito, quiet_NaN e signaling_NaN restituisce un valore diverso da zero.

is_bounded bool true se l'insieme di valori rappresentato dal tipo è finito.
is_modulo bool truese il tipo è modulo. Un tipo è modulo se è possibile aggiungere due numeri positivi e avere un risultato che va a capo a un terzo numero inferiore.
trappole bool true se il trapping è implementato per il tipo.
tinyness_before bool true se viene rilevata la minuzia prima dell'arrotondamento
round_style float_round_style

È uno stile di arrotondamento. Un tipo può avere uno dei seguenti valori enum:

round_toward_zero, se arrotonda verso zero.

round_to_nearest, se arrotonda al valore rappresentabile più vicino.

round_toward_infinity, se arrotonda verso l'infinito.

round_toward_neg_infinity, se arrotonda verso l'infinito negativo.

round_indeterminate, se lo stile di arrotondamento è indeterminabile in fase di compilazione.

Per tutti i tipi di cui sopra che non sono tipi aritmetici fondamentali, viene utilizzata la definizione del modello predefinita:

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;
};