Standard C++ Library Copyright 1998, Rogue Wave Software, Inc.

numeric_limits- A class for representing information about scalar types.

numeric_limits<float> numeric_limits<double> numeric_limits<long double> numeric_limits<short> numeric_limits<unsigned short> numeric_limits<int> numeric_limits<unsigned int> numeric_limits<long> numeric_limits<unsigned long> numeric_limits<char> numeric_limits<wchar_t> numeric_limits<unsigned char> numeric_limits<signed char> numeric_limits<bool>

#include <limits> template <class T> class numeric_limits ;

numeric_limits is a class for representing information about scalar types. Specializations are included for each funda- mental type, both floating point and integer, includingbool. This class encapsulates information that is contained in the <climits> and <cfloat> headers, and includes additional information that is not contained in any existing C or C++ header. Not all of the information given by members is meaningful for all specializations of numeric_limits. Any value that is not meaningful for a particular type is set to0orfalse.

template <class T> class numeric_limits { public: // General -- meaningful for all specializations. static const bool is_specialized ; static T min () throw(); static T max () throw(); static const int radix ; static const int digits ; static const int digits10 ; static const bool is_signed ; static const bool is_integer ; static const bool is_exact ; static const bool traps ; static const bool is_modulo ; static const bool is_bounded ; // Floating point specific. static T epsilon () throw(); static T round_error () throw(); static const int min_exponent10 ; static const int max_exponent10 ; static const int min_exponent ; static const int max_exponent ; static const bool has_infinity ; static const bool has_quiet_NaN ; static const bool has_signaling_NaN ; static const bool is_iec559 ; static const float_denorm_style has_denorm ; static const bool has_denorm_loss; static const bool tinyness_before ; static const float_round_style round_style ; static T denorm_min () throw(); static T infinity () throw(); static T quiet_NaN () throw(); static T signaling_NaN () throw(); }; enum float_round_style { round_indeterminate = -1, round_toward_zero = 0, round_to_nearest = 1, round_toward_infinity = 2, round_toward_neg_infinity = 3 }; enum float_denorm_style { denorm_indeterminate = -1, denorm_absent = 0, denorm_present = 1 };

static T denorm_min () throw(); Returns the minimum denormalized value. Meaningful for all floating point types. For types that do not allow denormalized values, this method must return the minimum normalized value. static const int digits ; The number of radix digits that can be represented without change. For built-in integer types,digitsis usually the number of non-sign bits in the representa- tion. For floating point types,digitsis the number of radix digits in the mantissa. This member is meaningful for all specializations that declareis_boundedto betrue. static const int digits10 ; The number of base 10 digits that can be represented without change. This function is meaningful for all specializations that declareis_boundedto betrue. static T epsilon () throw(); Returns the machine epsilon (the difference between1and the least value greater than1that is representable). This function is meaningful for floating point types only. static const float_denorm_style has_denorm ; Returnsdenorm_presentif the type allows denormalized values. Returnsdenorm_absentif the type does not allow denormalized values. Returnsdenorm_indeterminateif it is indeterminate at compile time whether the type allows denormalized values. It is meaningful for floating point types only. static const bool has_infinity ; This field istrueif the type has a representation for positive infinity. It is meaningful for floating point types only. This field must betruefor any type claiming conformance to IEC 559. static const bool has_quiet_NaN ; This field istrueif the type has a representation for a quiet (non-signaling) "Not a Number". It is meaningful for floating point types only and must betruefor any type claiming conformance to IEC 559. static const bool has_signaling_NaN ; This field istrueif the type has a representation for a signaling "Not a Number". It is meaningful for floating point types only, and must betruefor any type claiming conformance to IEC 559. static T infinity () throw(); Returns the representation of positive infinity, if available. This member function is meaningful for only those specializations that declarehas_infinityto betrue. Required for any type claiming conformance to IEC 559. static const bool is_bounded ; This field istrueif the set of values representable by the type is finite. All built-in C types are bounded; this member would befalsefor arbitrary precision types. static const bool is_exact ; This static member field istrueif the type uses an exact representation. All integer types are exact, but not vice versa. For example, rational and fixed-exponent representations are exact but not integer. This member is meaningful for all specializations. static const bool is_iec559 ; This member istrueif and only if the type adheres to the IEC 559 standard. It is meaningful for floating point types only. static const bool is_integer ; This member istrueif the type is integer. This member is meaningful for all specializations. static const bool is_modulo ; This field istrueif the type is modulo. Generally, this isfalsefor floating types,truefor unsigned integers, andtruefor signed integers on most machines. A type is modulo if it is possible to add two positive numbers and have a result that wraps around to a third number, which is less. static const bool is_signed ; This member istrueif the type is signed. This member is meaningful for all specializations. static const bool is_specialized ; Indicates whether numeric_limits has been specialized for typeT. This flag must betruefor all specializations ofnumeric_limits. For the default numeric_limits<T> tem- plate, this flag must befalse. static T max () throw(); Returns the maximum finite value. This function is mean- ingful for all specializations that declareis_boundedto betrue. static const int max_exponent ; The maximum positive integer such that the radix raised to the power one less than that integer is in range. This field is meaningful for floating point types only. static const int max_exponent10 ; The maximum positive integer such that 10 raised to that power is in range. This field is meaningful for floating point types only. static T min () throw(); Returns the minimum finite value. For floating point types with denormalization,min()must return the minimum normalized value. The minimum denormalized value is given bydenorm_min(). This function is meaningful for all spe- cializations that declareis_boundedto betrue, oris_bounded==false&&is_signed==false. static const int min_exponent ; The minimum negative integer such that the radix raised to the power one less than that integer is in range. This field is meaningful for floating point types only. static const int min_exponent10 ; The minimum negative integer such that 10 raised to that power is in range. This field is meaningful for floating point types only. static T quiet_NaN () throw(); Returns the representation of a quiet "Not a Number", if available. This function is meaningful only for those specializations that declarehas_quiet_NaNto betrue. This field is required for any type claiming conformance to IEC 559. static const int radix ; For floating types, specifies the base or radix of the exponent representation (often 2). For integer types, this member must specify the base of the representation. This field is meaningful for all specializations. static T round_error () throw(); Returns the measure of the maximum rounding error. This function is meaningful for floating point types only. static const float_round_style round_style ; The rounding style for the type. Specializations for integer types must returnround_toward_zero. This is meaningful for all floating point types. static T signaling_NaN() throw(); Returns the representation of a signaling "Not a Number", if available. This function is meaningful for only those specializations that declarehas_signaling_NaNto betrue. This function must be meaningful for any type claiming conformance to IEC 559. static const bool tinyness_before ; This member istrueiftinynessis detected before round- ing. It is meaningful for floating point types only. static const bool traps ; This field istrueif trapping is implemented for this type. Thetrapsfield is meaningful for all specializa- tions.

// // limits.cpp // #include <limits> #include <iostream> using namespace std; int main() { numeric_limits<float> float_info; if (float_info.is_specialized && float_info.has_infinity) { // get value of infinity cout<< float_info.infinity() << endl; } return 0; }

The specializations forwidecharsandboolare only avail- able if your compiler has implemented them as real types and not simulated them with typedefs. If your compiler does not support namespaces, then you do not need the using declaration forstd.

IEEE Standard for Binary Floating-Point Arithmetic, 345 East 47th Street, New York, NY 10017 Language Independent Arithmetic (LIA-1)