Perpustakaan C ++ - <limits>

pengantar

Ini adalah tipe batas Numerik dan memberikan informasi tentang properti tipe aritmatika (baik integral atau floating-point) di platform tertentu yang dikompilasi oleh library.

Pernyataan

Berikut adalah deklarasi untuk std :: numeric_limits.

template <class T> numeric_limits;

C ++ 11

template <class T> numeric_limits;

Parameter

T - Ini adalah jenis kelas.

Contoh

Dalam contoh di bawah ini untuk 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';
}

Output sampel harus seperti ini -

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

Instansiasi template

Jenis aritmatika dasar C ++ 98 harus seperti ini -

jenis aritmatika dasar
tipe integral bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
jenis titik mengambang float
double
long double

Jenis aritmatika dasar C ++ 11 harus seperti ini -

jenis aritmatika dasar
tipe integral 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
jenis titik mengambang float
double
long double

Anggota

anggota Tipe Properti
is_specialized bool Itu trueuntuk semua (yaitu, untuk yangnumeric_limitsterspesialisasi). dan falseuntuk semua jenis lainnya.
min () T

Ini adalah nilai terbatas minimum.

Untuk tipe mengambang dengan denormalisasi (jumlah variabel bit eksponen): nilai normalisasi positif minimum.

Setara dengan CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINatau 0, tergantung pada jenisnya.

maks () T

Ini adalah nilai hingga maksimum.

Setara dengan 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 atau LDBL_MAX, tergantung jenisnya.

terendah () T

Ini adalah nilai terbatas minimum. (sejak C ++ 11)

Untuk tipe integral: sama seperti min ().

Untuk tipe floating-point: tergantung pada implementasi; umumnya, negatif darimaks ().

digit int

Ini untuk tipe integer: jumlah bit non-tanda ( digit basis radix ) dalam representasi.

Untuk tipe mengambang: jumlah digit (dalam basis radix ) di mantissa (setara denganFLT_MANT_DIG, DBL_MANT_DIG atau LDBL_MANT_DIG).

digit10 int

Ini adalah jumlah digit (dalam basis desimal), yang dapat direpresentasikan tanpa perubahan.

Setara dengan FLT_DIG, DBL_DIG atau LDBL_DIG untuk tipe mengambang.

max_digits10 int Ini adalah jumlah digit (dalam basis desimal), yang diperlukan untuk memastikan bahwa nilai yang berbeda selalu terdiferensiasi.
is_signed bool true jika tipe ditandatangani.
is_integer bool true jika tipe integer.
is_exact bool true jika tipe menggunakan representasi yang tepat.
akar int

Ini untuk tipe integer: basis representasi.

Untuk tipe mengambang: basis eksponen representasi (setara dengan FLT_RADIX).

epsilon () T

Ini adalah mesin epsilon (perbedaan antara 1 dan nilai terkecil lebih besar dari 1 yang dapat direpresentasikan).

Setara dengan FLT_EPSILON, DBL_EPSILON atau LDBL_EPSILON untuk tipe mengambang.

round_error () T Ini mengukur kesalahan pembulatan maksimum.
min_exponent int

Ini adalah nilai integer negatif minimum sehingga radix dinaikkan untuk (min_exponent-1)menghasilkan angka floating-point yang dinormalisasi.

Setara dengan FLT_MIN_EXP, DBL_MIN_EXP atau LDBL_MIN_EXP untuk tipe mengambang.

min_exponent10 int

Ini adalah nilai bilangan bulat negatif minimum sehingga 10 yang dinaikkan ke pangkat itu menghasilkan angka floating-point yang dinormalisasi.

Setara dengan FLT_MIN_10_EXP, DBL_MIN_10_EXP atau LDBL_MIN_10_EXP untuk tipe mengambang.

max_exponent int

Ini adalah nilai bilangan bulat maksimum sehingga radix diangkat untuk (max_exponent-1)menghasilkan angka floating-point hingga yang dapat direpresentasikan.

Setara dengan FLT_MAX_EXP, DBL_MAX_EXP atau LDBL_MAX_EXP untuk tipe mengambang.

max_exponent10 int

Ini adalah nilai integer maksimum sehingga 10 yang dinaikkan ke daya tersebut menghasilkan angka floating-point hingga yang dinormalisasi.

Setara dengan FLT_MAX_10_EXP, DBL_MAX_10_EXP atau LDBL_MAX_10_EXP untuk tipe mengambang.

has_infinity bool true jika tipe memiliki representasi tak terhingga positif.
has_quiet_NaN bool true jika tipe memiliki representasi untuk "Not-a-Number" yang tenang (non-pensinyalan).
has_signaling_NaN bool true jika tipe memiliki representasi untuk pensinyalan "Not-a-Number".
has_denorm float_denorm_style

Ini adalah nilai yang didenormalisasi (representasi dengan sejumlah variabel bit eksponen). Suatu tipe mungkin memiliki salah satu nilai enum berikut -

denorm_absent, jika tidak memungkinkan nilai denormalisasi.

denorm_present, jika memungkinkan nilai denormalisasi.

denorm_indeterminate, jika tidak pasti pada waktu kompilasi.

has_denorm_loss bool truejika hilangnya akurasi terdeteksi sebagai kerugian denormalisasi, bukan hasil yang tidak pasti.
tak terhingga () T Ini mewakili infinity positif , jika tersedia.
quiet_NaN () T Ini mewakili ketenangan (non-pensinyalan) "Not-a-Number" , jika tersedia.
signaling_NaN () T Ini mewakili pensinyalan "Not-a-Number" , jika tersedia.
denorm_min () T

Nilai denormalisasi positif minimum.

Ini untuk tipe yang tidak mengizinkan nilai yang didenormalisasi: sama seperti min().

is_iec559 bool

true jika jenisnya mengikuti standar IEC-559 / IEEE-754.

Jenis IEC-559 selalu memiliki has_infinity, has_quiet_NaN dan has_signaling_NaNdiatur ke true; Dantak terhingga, quiet_NaN dan signaling_NaN mengembalikan beberapa nilai bukan nol.

terikat bool true jika himpunan nilai yang diwakili oleh jenisnya terbatas.
is_modulo bool truejika tipenya adalah modulo. Tipe adalah modulo jika dimungkinkan untuk menambahkan dua bilangan positif dan memiliki hasil yang membungkus bilangan ketiga yang lebih kecil.
perangkap bool true jika trapping diimplementasikan untuk tipe tersebut.
tinyness_before bool true jika kecilnya terdeteksi sebelum pembulatan.
round_style float_round_style

Ini adalah gaya pembulatan. Suatu tipe mungkin memiliki salah satu nilai enum berikut -

round_toward_zero, jika angka bulat mendekati nol.

round_to_nearest, jika dibulatkan ke nilai terwakili terdekat.

round_toward_infinity, jika itu membulat menuju tak terhingga.

round_toward_neg_infinity, jika dibulatkan menuju tak terhingga negatif.

round_indeterminate, jika gaya pembulatan tidak dapat ditentukan pada waktu kompilasi.

Untuk semua tipe di atas yang bukan tipe aritmatika dasar, definisi templat default digunakan -

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