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 |
È true per tutti (cioè quelli per i qualinumeric_limitsè specializzato). e false per 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 |
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 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 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 |
true se 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 |
is_iec559 | bool |
Un tipo IEC-559 lo ha sempre fatto has_infinity, has_quiet_NaN e has_signaling_NaNimpostato su |
is_bounded | bool |
true se l'insieme di valori rappresentato dal tipo è finito. |
is_modulo | bool |
true se 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;
};