Biblioteka C ++ - <limits>
Wprowadzenie
Jest to typ limitów numerycznych i dostarcza informacji o właściwościach typów arytmetycznych (całkowitych lub zmiennoprzecinkowych) na określonej platformie, dla której kompilowana jest biblioteka.
Deklaracja
Poniżej znajduje się deklaracja dla std :: numeric_limits.
template <class T> numeric_limits;
C ++ 11
template <class T> numeric_limits;
Parametry
T - To rodzaj zajęć.
Przykład
W poniższym przykładzie dla 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';
}
Przykładowe wyjście powinno wyglądać następująco:
type lowest type highest type
int -2147483648 2147483647
float -3.40282e+38 3.40282e+38
double -1.79769e+308 1.79769e+308
Instancje szablonów
Podstawowe typy arytmetyczne C ++ 98 powinny wyglądać następująco:
podstawowe typy arytmetyczne | |
---|---|
typy całkowite | bool |
char |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
typy zmiennoprzecinkowe | float |
double |
|
long double |
Podstawowe typy arytmetyczne C ++ 11 powinny wyglądać następująco:
podstawowe typy arytmetyczne | |
---|---|
typy całkowite | 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 |
|
typy zmiennoprzecinkowe | float |
double |
|
long double |
Członkowie
członek | rodzaj | własność |
---|---|---|
is_specialized | bool |
To jest true dla wszystkich (tj. Tych, dla którychnumeric_limitsjest wyspecjalizowana). i false dla wszystkich innych typów. |
min () | T | Jest to minimalna wartość skończona. Dla typów zmiennoprzecinkowych z denormalizacją (zmienna liczba bitów wykładnika): minimalna dodatnia znormalizowana wartość. Równoważny CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINlub w |
max () | T | Jest to maksymalna wartość skończona. Równoważny 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 lub LDBL_MAXw zależności od typu. |
najniższy () | T | Jest to minimalna wartość skończona. (od C ++ 11) Dla typów całkowitych: to samo, co min (). Dla typów zmiennoprzecinkowych: zależne od implementacji; ogólnie rzecz biorąc, negatywmax (). |
cyfry | int | Dotyczy typów całkowitych: liczba bitów bez znaku ( cyfry podstawy podstawy) w reprezentacji. Dla pływających typy: liczbę cyfr (w radix baza) w mantysy (odpowiednikFLT_MANT_DIG, DBL_MANT_DIG lub LDBL_MANT_DIG). |
cyfry 10 | int |
Jest to liczba cyfr (w systemie dziesiętnym), które można przedstawić bez zmiany. Równoważny FLT_DIG, DBL_DIG lub LDBL_DIG dla typów pływających. |
max_digits10 | int |
Jest to liczba cyfr (w systemie dziesiętnym), która jest wymagana do zapewnienia, że wartości, które się różnią, są zawsze zróżnicowane. |
is_signed | bool |
true jeśli typ jest podpisany. |
is_integer | bool |
true jeśli typ jest liczbą całkowitą. |
is_exact | bool |
true jeśli typ używa dokładnych reprezentacji. |
źródło | int |
Dotyczy typów całkowitych: podstawa reprezentacji. Dla typów zmiennoprzecinkowych: podstawa wykładnika reprezentacji (odpowiednik FLT_RADIX). |
epsilon () | T | Jest to epsilon maszyny (różnica między 1 a najmniejszą wartością większą niż 1, którą można przedstawić). Równoważny FLT_EPSILON, DBL_EPSILON lub LDBL_EPSILON dla typów pływających. |
round_error () | T | Mierzy maksymalny błąd zaokrąglenia. |
min_exponent | int |
Jest to minimalna ujemna liczba całkowita taka, że podstawa podniesiona do Równoważny FLT_MIN_EXP, DBL_MIN_EXP lub LDBL_MIN_EXP dla typów pływających. |
min_exponent10 | int |
Jest to minimalna ujemna liczba całkowita taka, że 10 podniesione do tej potęgi generuje znormalizowaną liczbę zmiennoprzecinkową. Równoważny FLT_MIN_10_EXP, DBL_MIN_10_EXP lub LDBL_MIN_10_EXP dla typów pływających. |
max_exponent | int |
Jest to maksymalna wartość całkowita taka, że podstawa podniesiona do Równoważny FLT_MAX_EXP, DBL_MAX_EXP lub LDBL_MAX_EXP dla typów pływających. |
max_exponent10 | int |
Jest to maksymalna wartość całkowita taka, że 10 podniesione do tej potęgi generuje znormalizowaną skończoną liczbę zmiennoprzecinkową. Równoważny FLT_MAX_10_EXP, DBL_MAX_10_EXP lub LDBL_MAX_10_EXP dla typów pływających. |
has_infinity | bool |
true jeśli typ ma reprezentację dodatniej nieskończoności. |
has_quiet_NaN | bool |
true jeśli typ ma reprezentację cichego (niesygnalizującego) „Not-a-Number”. |
has_signaling_NaN | bool |
true jeśli typ ma reprezentację dla sygnalizacji „Not-a-Number”. |
has_denorm | float_denorm_style | Są to wartości zdenormalizowane (reprezentacje ze zmienną liczbą bitów wykładnika). Typ może mieć dowolną z następujących wartości wyliczenia - denorm_absent, jeśli nie zezwala na zdenormalizowane wartości. denorm_present, jeśli zezwala na zdenormalizowane wartości. denorm_indeterminate, jeśli nieokreślony w czasie kompilacji. |
has_denorm_loss | bool |
true jeśli utrata dokładności zostanie wykryta jako utrata denormalizacji, a nie niedokładny wynik. |
nieskończoność() | T | Przedstawia dodatnią nieskończoność , jeśli jest dostępna. |
quiet_NaN () | T | Reprezentuje cichy (nie sygnalizujący) „Nie-numer” , jeśli jest dostępny. |
signaling_NaN () | T | Reprezentuje sygnalizację „Not-a-Number” , jeśli jest dostępna. |
denorm_min () | T | Minimalna dodatnia wartość zdenormalizowana. Dotyczy typów, które nie pozwalają na zdenormalizowane wartości: tak samo jak |
is_iec559 | bool |
Typ IEC-559 zawsze ma has_infinity, has_quiet_NaN i has_signaling_NaNustawiony na |
jest ograniczona | bool |
true jeśli zbiór wartości reprezentowanych przez typ jest skończony. |
is_modulo | bool |
true jeśli typ to modulo. Typ to modulo, jeśli można dodać dwie liczby dodatnie i uzyskać wynik, który zawija się do trzeciej liczby, która jest mniejsza. |
majdan | bool |
true jeśli dla typu zaimplementowano zalewkowanie. |
tinyness_before | bool |
true jeśli bladość zostanie wykryta przed zaokrągleniem. |
round_style | float_round_style | To styl zaokrąglania. Typ może mieć dowolną z następujących wartości wyliczenia - round_toward_zero, jeśli zaokrągla się w kierunku zera. round_to_nearest, jeśli zaokrągla do najbliższej możliwej do przedstawienia wartości. round_toward_infinity, jeśli zaokrągla się w nieskończoność. round_toward_neg_infinity, jeśli zaokrągla się w kierunku ujemnej nieskończoności. round_indeterminate, jeśli styl zaokrąglania jest nieokreślony w czasie kompilacji. |
Dla wszystkich powyższych typów, które nie są podstawowymi typami arytmetycznymi, używana jest domyślna definicja szablonu -
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;
};