Thư viện C ++ - <limits>

Giới thiệu

Đây là loại giới hạn Số và nó cung cấp thông tin về các thuộc tính của các loại số học (tích phân hoặc dấu phẩy động) trong nền tảng cụ thể mà thư viện biên dịch.

Tờ khai

Sau đây là khai báo cho std :: numeric_limits.

template <class T> numeric_limits;

C ++ 11

template <class T> numeric_limits;

Thông số

T - Đó là một loại giai cấp.

Thí dụ

Trong ví dụ dưới đây cho 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';
}

Đầu ra mẫu phải như thế này -

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

Thuyết minh mẫu

Các kiểu số học cơ bản của C ++ 98 phải như thế này:

các loại số học cơ bản
các loại tích phân bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
các loại dấu chấm động float
double
long double

Các kiểu số học cơ bản của C ++ 11 phải như thế này:

các loại số học cơ bản
các loại tích phân 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
các loại dấu chấm động float
double
long double

Các thành viên

thành viên kiểu bất động sản
is_specialized bool truedành cho tất cả (tức là những cái mànumeric_limitslà chuyên biệt). và falsecho tất cả các loại khác.
min () T

Nó là một giá trị hữu hạn nhỏ nhất.

Đối với kiểu trôi nổi có bất chuẩn hóa (số bit mũ biến đổi): giá trị chuẩn hóa dương tối thiểu.

Tương đương với CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINhoặc 0, tùy thuộc vào loại.

max () T

Nó là một giá trị hữu hạn tối đa.

Tương đương với 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 hoặc là LDBL_MAX, tùy loại.

thấp nhất () T

Nó là một giá trị hữu hạn nhỏ nhất. (kể từ C ++ 11)

Đối với loại tích phân: giống như min ().

Đối với các loại dấu phẩy động: thực hiện-phụ thuộc; nói chung, tiêu cực củamax ().

chữ số int

Đó là đối với các loại nguyên: số bit không dấu ( radix cơ sở chữ số) trong các đại diện.

Đối với kiểu số động: số chữ số (trong cơ số cơ số ) trong phần định trị (tương đương vớiFLT_MANT_DIG, DBL_MANT_DIG hoặc là LDBL_MANT_DIG).

chữ số10 int

Nó là một số chữ số (trong cơ số thập phân), có thể được biểu diễn mà không thay đổi.

Tương đương với FLT_DIG, DBL_DIG hoặc là LDBL_DIG đối với các loại nổi.

max_digits10 int Nó là một số chữ số (trong cơ số thập phân), bắt buộc để đảm bảo rằng các giá trị khác nhau luôn được phân biệt.
is_signed bool true nếu loại được ký.
is_integer bool true nếu kiểu là số nguyên.
is_exact bool true if type sử dụng các đại diện chính xác.
cơ số int

Nó dành cho kiểu số nguyên: cơ sở của biểu diễn.

Đối với kiểu trôi nổi: cơ số của số mũ của biểu diễn (tương đương với FLT_RADIX).

epsilon () T

Nó là một máy epsilon (sự khác biệt giữa giá trị 1 và giá trị nhỏ nhất lớn hơn 1 có thể đại diện được).

Tương đương với FLT_EPSILON, DBL_EPSILON hoặc là LDBL_EPSILON đối với các loại nổi.

round_error () T Nó đo lỗi làm tròn tối đa.
min_exponent int

Nó là một giá trị nguyên âm tối thiểu sao cho cơ số được nâng lên để (min_exponent-1)tạo ra một số dấu phẩy động chuẩn hóa.

Tương đương với FLT_MIN_EXP, DBL_MIN_EXP hoặc là LDBL_MIN_EXP đối với các loại nổi.

min_exponent10 int

Đó là một giá trị số nguyên âm tối thiểu sao cho 10 được nâng lên thành lũy thừa đó sẽ tạo ra một số dấu phẩy động chuẩn hóa.

Tương đương với FLT_MIN_10_EXP, DBL_MIN_10_EXP hoặc là LDBL_MIN_10_EXP đối với các loại nổi.

max_exponent int

Nó là một giá trị số nguyên lớn nhất sao cho cơ số được nâng lên để (max_exponent-1)tạo ra một số dấu phẩy động hữu hạn có thể biểu diễn.

Tương đương với FLT_MAX_EXP, DBL_MAX_EXP hoặc là LDBL_MAX_EXP đối với các loại nổi.

max_exponent10 int

Đó là giá trị số nguyên lớn nhất sao cho 10 được nâng lên thành lũy thừa đó sẽ tạo ra một số dấu phẩy động hữu hạn chuẩn hóa.

Tương đương với FLT_MAX_10_EXP, DBL_MAX_10_EXP hoặc là LDBL_MAX_10_EXP đối với các loại nổi.

has_infinity bool true nếu kiểu có biểu diễn cho dương vô cực.
has_quiet_NaN bool true nếu loại có đại diện cho "Not-a-Number" yên tĩnh (không phát tín hiệu).
has_signaling_NaN bool true nếu kiểu có đại diện cho tín hiệu "Không phải số".
has_denorm float_denorm_style

Nó là một giá trị không chuẩn hóa (biểu diễn với một số bit mũ biến đổi). Một kiểu có thể có bất kỳ giá trị enum nào sau đây:

Derm_absent, nếu nó không cho phép các giá trị không chuẩn hóa.

derm_present, nếu nó cho phép các giá trị không chuẩn hóa.

không xác định, nếu không xác định tại thời điểm biên dịch.

has_denorm_loss bool truenếu mất độ chính xác được phát hiện là mất chuẩn hóa, chứ không phải là kết quả không chính xác.
vô cực() T Nó đại diện cho vô cực dương , nếu có.
yên tĩnh_NaN () T Nó đại diện cho "Not-a-Number" yên tĩnh (không phát tín hiệu) , nếu có.
signal_NaN () T Nó đại diện cho việc báo hiệu "Not-a-Number" , nếu có.
Derm_min () T

Giá trị không chuẩn hóa dương tối thiểu.

Nó dành cho các loại không cho phép các giá trị không chuẩn hóa: giống như min().

is_iec559 bool

true nếu loại tuân theo tiêu chuẩn IEC-559 / IEEE-754.

Loại IEC-559 luôn có has_infinity, has_quiet_NaNhas_signaling_NaNđặt thành true; Vàvô cực, yên tĩnh_NaNsignal_NaN trả về một số giá trị khác 0.

is_bound bool true nếu tập giá trị được biểu diễn bởi kiểu là hữu hạn.
is_modulo bool truenếu loại là modulo. Một loại là modulo nếu có thể cộng hai số dương và có kết quả bao quanh một số thứ ba nhỏ hơn.
bẫy bool true nếu bẫy được triển khai cho loại.
tinyness_before bool true nếu độ nhỏ được phát hiện trước khi làm tròn.
round_style float_round_style

Đó là một phong cách làm tròn. Một kiểu có thể có bất kỳ giá trị enum nào sau đây:

round_toward_zero, nếu nó làm tròn về 0.

round_to_nerily, nếu nó làm tròn đến giá trị có thể biểu diễn gần nhất.

round_toward_infinity, nếu nó tròn về phía vô cùng.

round_toward_neg_infinity, nếu nó làm tròn về phía âm vô cùng.

round_indeterfinite, nếu kiểu làm tròn là không thể xác định được tại thời điểm biên dịch.

Đối với tất cả các loại ở trên không phải là loại số học cơ bản, định nghĩa mẫu mặc định được sử dụng:

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