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 truedla wszystkich (tj. Tych, dla którychnumeric_limitsjest wyspecjalizowana). i falsedla 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 0zależności od typu.

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 (min_exponent-1)generuje znormalizowaną liczbę zmiennoprzecinkową.

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 (max_exponent-1)generuje dającą się reprezentować skończoną liczbę zmiennoprzecinkową.

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 truejeś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 min().

is_iec559 bool

true jeśli typ jest zgodny z normą IEC-559 / IEEE-754.

Typ IEC-559 zawsze ma has_infinity, has_quiet_NaN i has_signaling_NaNustawiony na true; Inieskończoność, quiet_NaN i signaling_NaN zwraca pewną niezerową wartość.

jest ograniczona bool true jeśli zbiór wartości reprezentowanych przez typ jest skończony.
is_modulo bool truejeś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;
};