C ++ Kitaplığı - <sınırlar>

Giriş

Bu bir Sayısal limit türüdür ve kütüphanenin derlediği belirli platformdaki aritmetik türlerin (integral veya kayan nokta) özellikleri hakkında bilgi sağlar.

Beyanname

Aşağıda std :: numeric_limits için bildirim verilmiştir.

template <class T> numeric_limits;

C ++ 11

template <class T> numeric_limits;

Parametreler

T - Bir tür sınıftır.

Misal

Aşağıdaki örnekte std :: numeric_limits için.

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

Örnek çıktı şu şekilde olmalıdır -

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

Şablon örnekleri

C ++ 98'in temel aritmetik türleri şöyle olmalıdır -

temel aritmetik türler
integral türleri bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
kayan nokta türleri float
double
long double

C ++ 11'in temel aritmetik türleri şöyle olmalıdır -

temel aritmetik türler
integral türleri 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
kayan nokta türleri float
double
long double

Üyeler

üye tip Emlak
is_specialized bool Herkes trueiçindir (yani,sayısal_sınırlaruzmanlaşmıştır). ve falsediğer tüm türler için.
dk () T

Minimum sonlu bir değerdir.

Normalize olmayan kayan tipler için (değişken sayıda üs biti): minimum pozitif normalleştirilmiş değer.

Eşittir ÇEKİCİ, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINveya 0türüne bağlı olarak.

max () T

Maksimum sonlu bir değerdir.

Eşittir 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 veya LDBL_MAXtürüne bağlı olarak.

en düşük() T

Minimum sonlu bir değerdir. (C ++ 11'den beri)

İntegral türleri için: aynı dk ().

Kayan nokta türleri için: uygulamaya bağlı; genellikle olumsuzmax ().

rakamlar int

Tamsayı türleri içindir: gösterimdeki işaretsiz bitlerin sayısı ( taban tabanı basamakları).

Kayan türler için: mantisteki basamak sayısı ( taban tabanında) (eşdeğerFLT_MANT_DIG, DBL_MANT_DIG veya LDBL_MANT_DIG).

rakamlar10 int

Değişiklik yapılmadan gösterilebilen (ondalık tabanda) bir sayıdır.

Eşittir FLT_DIG, DBL_DIG veya LDBL_DIG yüzer tipler için.

max_digits10 int Farklı değerlerin her zaman farklı olmasını sağlamak için gerekli olan (ondalık tabanda) bir dizi basamaktır.
is_signed bool true tip imzalanmışsa.
is_integer bool true tür tamsayı ise.
is_exact bool true tür tam gösterimleri kullanıyorsa.
kök int

Tam sayı türleri içindir: temsilin tabanı.

Kayan türler için: temsilin üssünün tabanı (eşdeğer FLT_RADIX).

epsilon() T

Bu bir makine epsilon'dur (1 ile 1'den büyük olan en küçük değer arasındaki fark gösterilebilir).

Eşittir FLT_EPSILON, DBL_EPSILON veya LDBL_EPSILON yüzer tipler için.

round_error () T Maksimum yuvarlama hatasını ölçer.
min_exponent int

Bu, normalleştirilmiş bir kayan noktalı sayı oluşturmak için yükseltilen tabanda bir minimum negatif tamsayı değeridir (min_exponent-1).

Eşittir FLT_MIN_EXP, DBL_MIN_EXP veya LDBL_MIN_EXP yüzer tipler için.

min_exponent10 int

Bu, o güce yükseltilen 10'un normalleştirilmiş bir kayan nokta sayısı oluşturacağı şekilde minimum bir negatif tamsayı değeridir.

Eşittir FLT_MIN_10_EXP, DBL_MIN_10_EXP veya LDBL_MIN_10_EXP yüzer tipler için.

max_exponent int

Radix'in(max_exponent-1) gösterilebilir bir sonlu kayan nokta sayısı oluşturacak şekilde yükseltildiği bir maksimum tamsayı değeridir .

Eşittir FLT_MAX_EXP, DBL_MAX_EXP veya LDBL_MAX_EXP yüzer tipler için.

max_exponent10 int

Bu güce yükseltilen 10'un normalize edilmiş sonlu bir kayan noktalı sayı oluşturduğu bir maksimum tamsayı değeridir.

Eşittir FLT_MAX_10_EXP, DBL_MAX_10_EXP veya LDBL_MAX_10_EXP yüzer tipler için.

has_infinity bool true türün pozitif sonsuzluk için bir temsili varsa.
has_quiet_NaN bool true tip, sessiz (sinyal vermeyen) "Not-a-Number" için bir gösterime sahipse.
has_signaling_NaN bool true tipin bir "Not-a-Number" sinyali için bir temsili varsa.
has_denorm float_denorm_style

Bu normal olmayan bir değerdir (değişken sayıda üslü bit içeren temsiller). Bir tür aşağıdaki enum değerlerinden herhangi birine sahip olabilir -

denorm_absent, normal olmayan değerlere izin vermiyorsa.

denorm_present, normal olmayan değerlere izin veriyorsa.

denorm_indeterminate, derleme zamanında belirsiz ise.

has_denorm_loss bool trueeğer a doğruluğu kaybı bir denormalization kaybı yerine bir tam olmayan sonucu olarak tespit edilir.
sonsuzluk() T Varsa , pozitif sonsuzluğu temsil eder .
sessiz_NaN () T Varsa sessiz (sinyal vermeyen) "Not-a-Number" ı temsil eder .
signaling_NaN () T Varsa "Not-a-Number" sinyalini temsil eder .
denorm_min () T

Minimum pozitif denormalize edilmiş değer.

Normalize edilmemiş değerlere izin vermeyen türler içindir: ile aynı min().

is_iec559 bool

true tip IEC-559 / IEEE-754 standardına uygunsa.

IEC-559 tipinde her zaman has_infinity, has_quiet_NaN ve has_signaling_NaNayarlandı true; Vesonsuzluk, sessiz_NaN ve signaling_NaN sıfır olmayan bir değer döndür.

Sınırlı bool true tür tarafından temsil edilen değerler kümesi sonluysa.
is_modulo bool truetür modulo ise. Bir türüdür modülo iki pozitif sayılar ekleyip bir sonuç olması mümkün olması durumunda daha az bir üçüncü numaraya sarar.
tuzaklar bool true tür için yakalama uygulanırsa.
kalaysızlık_önce bool true yuvarlamadan önce kalaylık tespit edilirse.
round_style float_round_style

Yuvarlama tarzıdır. Bir tür aşağıdaki enum değerlerinden herhangi birine sahip olabilir -

round_toward_zero, sıfıra yuvarlanırsa.

round_to_nearest, gösterilebilir en yakın değere yuvarlarsa.

round_toward_infinitysonsuza doğru yuvarlanırsa.

round_toward_neg_infinity, negatif sonsuza doğru yuvarlanırsa.

round_indeterminate, yuvarlama stili derleme zamanında belirlenemezse.

Temel aritmetik türler olmayan yukarıdaki tüm türler için varsayılan şablon tanımı kullanılır -

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