libstdc++
limits
Go to the documentation of this file.
00001 // The template and inlines for the numeric_limits classes. -*- C++ -*-
00002 
00003 // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
00004 // 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
00005 //
00006 // This file is part of the GNU ISO C++ Library.  This library is free
00007 // software; you can redistribute it and/or modify it under the
00008 // terms of the GNU General Public License as published by the
00009 // Free Software Foundation; either version 3, or (at your option)
00010 // any later version.
00011 
00012 // This library is distributed in the hope that it will be useful,
00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 // GNU General Public License for more details.
00016 
00017 // Under Section 7 of GPL version 3, you are granted additional
00018 // permissions described in the GCC Runtime Library Exception, version
00019 // 3.1, as published by the Free Software Foundation.
00020 
00021 // You should have received a copy of the GNU General Public License and
00022 // a copy of the GCC Runtime Library Exception along with this program;
00023 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
00024 // <http://www.gnu.org/licenses/>.
00025 
00026 /** @file include/limits
00027  *  This is a Standard C++ Library header.
00028  */
00029 
00030 // Note: this is not a conforming implementation.
00031 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
00032 
00033 //
00034 // ISO 14882:1998
00035 // 18.2.1
00036 //
00037 
00038 #ifndef _GLIBCXX_NUMERIC_LIMITS
00039 #define _GLIBCXX_NUMERIC_LIMITS 1
00040 
00041 #pragma GCC system_header
00042 
00043 #include <bits/c++config.h>
00044 
00045 //
00046 // The numeric_limits<> traits document implementation-defined aspects
00047 // of fundamental arithmetic data types (integers and floating points).
00048 // From Standard C++ point of view, there are 14 such types:
00049 //   * integers
00050 //         bool                         (1)
00051 //         char, signed char, unsigned char, wchar_t            (4)
00052 //         short, unsigned short                (2)
00053 //         int, unsigned                    (2)
00054 //         long, unsigned long                  (2)
00055 //
00056 //   * floating points
00057 //         float                        (1)
00058 //         double                       (1)
00059 //         long double                      (1)
00060 //
00061 // GNU C++ understands (where supported by the host C-library)
00062 //   * integer
00063 //         long long, unsigned long long            (2)
00064 //
00065 // which brings us to 16 fundamental arithmetic data types in GNU C++.
00066 //
00067 //
00068 // Since a numeric_limits<> is a bit tricky to get right, we rely on
00069 // an interface composed of macros which should be defined in config/os
00070 // or config/cpu when they differ from the generic (read arbitrary)
00071 // definitions given here.
00072 //
00073 
00074 // These values can be overridden in the target configuration file.
00075 // The default values are appropriate for many 32-bit targets.
00076 
00077 // GCC only intrinsically supports modulo integral types.  The only remaining
00078 // integral exceptional values is division by zero.  Only targets that do not
00079 // signal division by zero in some "hard to ignore" way should use false.
00080 #ifndef __glibcxx_integral_traps
00081 # define __glibcxx_integral_traps true
00082 #endif
00083 
00084 // float
00085 //
00086 
00087 // Default values.  Should be overridden in configuration files if necessary.
00088 
00089 #ifndef __glibcxx_float_has_denorm_loss
00090 #  define __glibcxx_float_has_denorm_loss false
00091 #endif
00092 #ifndef __glibcxx_float_traps
00093 #  define __glibcxx_float_traps false
00094 #endif
00095 #ifndef __glibcxx_float_tinyness_before
00096 #  define __glibcxx_float_tinyness_before false
00097 #endif
00098 
00099 // double
00100 
00101 // Default values.  Should be overridden in configuration files if necessary.
00102 
00103 #ifndef __glibcxx_double_has_denorm_loss
00104 #  define __glibcxx_double_has_denorm_loss false
00105 #endif
00106 #ifndef __glibcxx_double_traps
00107 #  define __glibcxx_double_traps false
00108 #endif
00109 #ifndef __glibcxx_double_tinyness_before
00110 #  define __glibcxx_double_tinyness_before false
00111 #endif
00112 
00113 // long double
00114 
00115 // Default values.  Should be overridden in configuration files if necessary.
00116 
00117 #ifndef __glibcxx_long_double_has_denorm_loss
00118 #  define __glibcxx_long_double_has_denorm_loss false
00119 #endif
00120 #ifndef __glibcxx_long_double_traps
00121 #  define __glibcxx_long_double_traps false
00122 #endif
00123 #ifndef __glibcxx_long_double_tinyness_before
00124 #  define __glibcxx_long_double_tinyness_before false
00125 #endif
00126 
00127 // You should not need to define any macros below this point.
00128 
00129 #define __glibcxx_signed(T) ((T)(-1) < 0)
00130 
00131 #define __glibcxx_min(T) \
00132   (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
00133 
00134 #define __glibcxx_max(T) \
00135   (__glibcxx_signed (T) ? \
00136    (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
00137 
00138 #define __glibcxx_digits(T) \
00139   (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
00140 
00141 // The fraction 643/2136 approximates log10(2) to 7 significant digits.
00142 #define __glibcxx_digits10(T) \
00143   (__glibcxx_digits (T) * 643L / 2136)
00144 
00145 #define __glibcxx_max_digits10(T) \
00146   (2 + (T) * 643L / 2136)
00147 
00148 namespace std _GLIBCXX_VISIBILITY(default)
00149 {
00150 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00151 
00152   /**
00153    *  @brief Describes the rounding style for floating-point types.
00154    *
00155    *  This is used in the std::numeric_limits class.
00156   */
00157   enum float_round_style
00158   {
00159     round_indeterminate       = -1,    /// Intermediate.
00160     round_toward_zero         = 0,     /// To zero.
00161     round_to_nearest          = 1,     /// To the nearest representable value.
00162     round_toward_infinity     = 2,     /// To infinity.
00163     round_toward_neg_infinity = 3      /// To negative infinity.
00164   };
00165 
00166   /**
00167    *  @brief Describes the denormalization for floating-point types.
00168    *
00169    *  These values represent the presence or absence of a variable number
00170    *  of exponent bits.  This type is used in the std::numeric_limits class.
00171   */
00172   enum float_denorm_style
00173   {
00174     /// Indeterminate at compile time whether denormalized values are allowed.
00175     denorm_indeterminate = -1,
00176     /// The type does not allow denormalized values.
00177     denorm_absent        = 0,
00178     /// The type allows denormalized values.
00179     denorm_present       = 1
00180   };
00181 
00182   /**
00183    *  @brief Part of std::numeric_limits.
00184    *
00185    *  The @c static @c const members are usable as integral constant
00186    *  expressions.
00187    *
00188    *  @note This is a separate class for purposes of efficiency; you
00189    *        should only access these members as part of an instantiation
00190    *        of the std::numeric_limits class.
00191   */
00192   struct __numeric_limits_base
00193   {
00194     /** This will be true for all fundamental types (which have
00195     specializations), and false for everything else.  */
00196     static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
00197 
00198     /** The number of @c radix digits that be represented without change:  for
00199     integer types, the number of non-sign bits in the mantissa; for
00200     floating types, the number of @c radix digits in the mantissa.  */
00201     static _GLIBCXX_USE_CONSTEXPR int digits = 0;
00202 
00203     /** The number of base 10 digits that can be represented without change. */
00204     static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
00205 
00206 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00207     /** The number of base 10 digits required to ensure that values which
00208     differ are always differentiated.  */
00209     static constexpr int max_digits10 = 0;
00210 #endif
00211 
00212     /** True if the type is signed.  */
00213     static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00214 
00215     /** True if the type is integer.
00216      *  Is this supposed to be <em>if the type is integral?</em>  */
00217     static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
00218 
00219     /** True if the type uses an exact representation. <em>All integer types are
00220     exact, but not all exact types are integer.  For example, rational and
00221     fixed-exponent representations are exact but not integer.</em>
00222     [18.2.1.2]/15  */
00223     static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
00224 
00225     /** For integer types, specifies the base of the representation.  For
00226     floating types, specifies the base of the exponent representation.  */
00227     static _GLIBCXX_USE_CONSTEXPR int radix = 0;
00228 
00229     /** The minimum negative integer such that @c radix raised to the power of
00230     (one less than that integer) is a normalized floating point number.  */
00231     static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00232 
00233     /** The minimum negative integer such that 10 raised to that power is in
00234     the range of normalized floating point numbers.  */
00235     static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00236 
00237     /** The maximum positive integer such that @c radix raised to the power of
00238     (one less than that integer) is a representable finite floating point
00239     number.  */
00240     static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00241 
00242     /** The maximum positive integer such that 10 raised to that power is in
00243     the range of representable finite floating point numbers.  */
00244     static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00245 
00246     /** True if the type has a representation for positive infinity.  */
00247     static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00248 
00249     /** True if the type has a representation for a quiet (non-signaling)
00250     <em>Not a Number</em>.  */
00251     static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00252 
00253     /** True if the type has a representation for a signaling
00254     <em>Not a Number</em>.  */
00255     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00256 
00257     /** See std::float_denorm_style for more information.  */
00258     static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
00259 
00260     /** <em>True if loss of accuracy is detected as a denormalization loss,
00261     rather than as an inexact result.</em> [18.2.1.2]/42  */
00262     static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00263 
00264     /** True if-and-only-if the type adheres to the IEC 559 standard, also
00265     known as IEEE 754.  (Only makes sense for floating point types.)  */
00266     static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00267 
00268     /** <em>True if the set of values representable by the type is
00269     finite.  All built-in types are bounded, this member would be
00270     false for arbitrary precision types.</em> [18.2.1.2]/54  */
00271     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
00272 
00273     /** True if the type is @e modulo, that is, if it is possible to add two
00274     positive numbers and have a result that wraps around to a third number
00275     that is less.  Typically false for floating types, true for unsigned
00276     integers, and true for signed integers.  */
00277     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00278 
00279     /** True if trapping is implemented for this type.  */
00280     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
00281 
00282     /** True if tininess is detected before rounding.  (see IEC 559)  */
00283     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00284 
00285     /** See std::float_round_style for more information.  This is only
00286     meaningful for floating types; integer types will all be
00287     round_toward_zero.  */
00288     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
00289                             round_toward_zero;
00290   };
00291 
00292   /**
00293    *  @brief Properties of fundamental types.
00294    *
00295    *  This class allows a program to obtain information about the
00296    *  representation of a fundamental type on a given platform.  For
00297    *  non-fundamental types, the functions will return 0 and the data
00298    *  members will all be @c false.
00299    *
00300    *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
00301    *  noted, but not incorporated in this documented (yet).
00302   */
00303   template<typename _Tp>
00304     struct numeric_limits : public __numeric_limits_base
00305     {
00306       /** The minimum finite value, or for floating types with
00307       denormalization, the minimum positive normalized value.  */
00308       static _GLIBCXX_CONSTEXPR _Tp
00309       min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00310 
00311       /** The maximum finite value.  */
00312       static _GLIBCXX_CONSTEXPR _Tp
00313       max() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00314 
00315 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00316       /** A finite value x such that there is no other finite value y
00317        *  where y < x.  */
00318       static constexpr _Tp
00319       lowest() noexcept { return static_cast<_Tp>(0); }
00320 #endif
00321 
00322       /** The @e machine @e epsilon:  the difference between 1 and the least
00323       value greater than 1 that is representable.  */
00324       static _GLIBCXX_CONSTEXPR _Tp
00325       epsilon() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00326 
00327       /** The maximum rounding error measurement (see LIA-1).  */
00328       static _GLIBCXX_CONSTEXPR _Tp
00329       round_error() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00330 
00331       /** The representation of positive infinity, if @c has_infinity.  */
00332       static _GLIBCXX_CONSTEXPR _Tp
00333       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00334 
00335       /** The representation of a quiet <em>Not a Number</em>,
00336       if @c has_quiet_NaN. */
00337       static _GLIBCXX_CONSTEXPR _Tp
00338       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00339 
00340       /** The representation of a signaling <em>Not a Number</em>, if
00341       @c has_signaling_NaN. */
00342       static _GLIBCXX_CONSTEXPR _Tp
00343       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00344 
00345       /** The minimum positive denormalized value.  For types where
00346       @c has_denorm is false, this is the minimum positive normalized
00347       value.  */
00348       static _GLIBCXX_CONSTEXPR _Tp
00349       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
00350     };
00351 
00352 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00353   template<typename _Tp>
00354     struct numeric_limits<const _Tp>
00355     : public numeric_limits<_Tp> { };
00356 
00357   template<typename _Tp>
00358     struct numeric_limits<volatile _Tp>
00359     : public numeric_limits<_Tp> { };
00360 
00361   template<typename _Tp>
00362     struct numeric_limits<const volatile _Tp>
00363     : public numeric_limits<_Tp> { };
00364 #endif
00365 
00366   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
00367   // you get the count right. (18 in c++0x mode)
00368 
00369   /// numeric_limits<bool> specialization.
00370   template<>
00371     struct numeric_limits<bool>
00372     {
00373       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00374 
00375       static _GLIBCXX_CONSTEXPR bool 
00376       min() _GLIBCXX_USE_NOEXCEPT { return false; }
00377 
00378       static _GLIBCXX_CONSTEXPR bool 
00379       max() _GLIBCXX_USE_NOEXCEPT { return true; }
00380 
00381 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00382       static constexpr bool
00383       lowest() noexcept { return min(); }
00384 #endif
00385       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
00386       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
00387 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00388       static constexpr int max_digits10 = 0;
00389 #endif
00390       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00391       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00392       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00393       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00394 
00395       static _GLIBCXX_CONSTEXPR bool 
00396       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
00397 
00398       static _GLIBCXX_CONSTEXPR bool 
00399       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
00400 
00401       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00402       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00403       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00404       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00405 
00406       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00407       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00408       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00409       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00410        = denorm_absent;
00411       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00412 
00413       static _GLIBCXX_CONSTEXPR bool 
00414       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
00415 
00416       static _GLIBCXX_CONSTEXPR bool 
00417       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
00418 
00419       static _GLIBCXX_CONSTEXPR bool 
00420       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
00421 
00422       static _GLIBCXX_CONSTEXPR bool 
00423       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
00424 
00425       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00426       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00427       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00428 
00429       // It is not clear what it means for a boolean type to trap.
00430       // This is a DR on the LWG issue list.  Here, I use integer
00431       // promotion semantics.
00432       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00433       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00434       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00435        = round_toward_zero;
00436     };
00437 
00438   /// numeric_limits<char> specialization.
00439   template<>
00440     struct numeric_limits<char>
00441     {
00442       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00443 
00444       static _GLIBCXX_CONSTEXPR char 
00445       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
00446 
00447       static _GLIBCXX_CONSTEXPR char 
00448       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
00449 
00450 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00451       static constexpr char 
00452       lowest() noexcept { return min(); }
00453 #endif
00454 
00455       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
00456       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
00457 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00458       static constexpr int max_digits10 = 0;
00459 #endif
00460       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
00461       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00462       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00463       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00464 
00465       static _GLIBCXX_CONSTEXPR char 
00466       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00467 
00468       static _GLIBCXX_CONSTEXPR char 
00469       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00470 
00471       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00472       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00473       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00474       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00475 
00476       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00477       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00478       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00479       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00480        = denorm_absent;
00481       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00482 
00483       static _GLIBCXX_CONSTEXPR 
00484       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
00485 
00486       static _GLIBCXX_CONSTEXPR char 
00487       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
00488 
00489       static _GLIBCXX_CONSTEXPR char 
00490       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
00491 
00492       static _GLIBCXX_CONSTEXPR char 
00493       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
00494 
00495       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00496       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00497       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00498 
00499       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00500       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00501       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00502        = round_toward_zero;
00503     };
00504 
00505   /// numeric_limits<signed char> specialization.
00506   template<>
00507     struct numeric_limits<signed char>
00508     {
00509       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00510 
00511       static _GLIBCXX_CONSTEXPR signed char 
00512       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
00513 
00514       static _GLIBCXX_CONSTEXPR signed char 
00515       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
00516 
00517 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00518       static constexpr signed char 
00519       lowest() noexcept { return min(); }
00520 #endif
00521 
00522       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
00523       static _GLIBCXX_USE_CONSTEXPR int digits10 
00524        = __glibcxx_digits10 (signed char);
00525 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00526       static constexpr int max_digits10 = 0;
00527 #endif
00528       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
00529       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00530       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00531       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00532 
00533       static _GLIBCXX_CONSTEXPR signed char 
00534       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00535 
00536       static _GLIBCXX_CONSTEXPR signed char 
00537       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00538 
00539       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00540       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00541       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00542       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00543 
00544       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00545       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00546       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00547       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00548        = denorm_absent;
00549       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00550 
00551       static _GLIBCXX_CONSTEXPR signed char 
00552       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
00553 
00554       static _GLIBCXX_CONSTEXPR signed char 
00555       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
00556 
00557       static _GLIBCXX_CONSTEXPR signed char 
00558       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00559       { return static_cast<signed char>(0); }
00560 
00561       static _GLIBCXX_CONSTEXPR signed char 
00562       denorm_min() _GLIBCXX_USE_NOEXCEPT
00563       { return static_cast<signed char>(0); }
00564 
00565       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00566       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00567       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00568 
00569       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00570       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00571       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00572        = round_toward_zero;
00573     };
00574 
00575   /// numeric_limits<unsigned char> specialization.
00576   template<>
00577     struct numeric_limits<unsigned char>
00578     {
00579       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00580 
00581       static _GLIBCXX_CONSTEXPR unsigned char 
00582       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
00583 
00584       static _GLIBCXX_CONSTEXPR unsigned char 
00585       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
00586 
00587 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00588       static constexpr unsigned char 
00589       lowest() noexcept { return min(); }
00590 #endif
00591 
00592       static _GLIBCXX_USE_CONSTEXPR int digits 
00593        = __glibcxx_digits (unsigned char);
00594       static _GLIBCXX_USE_CONSTEXPR int digits10 
00595        = __glibcxx_digits10 (unsigned char);
00596 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00597       static constexpr int max_digits10 = 0;
00598 #endif
00599       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00600       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00601       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00602       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00603 
00604       static _GLIBCXX_CONSTEXPR unsigned char 
00605       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00606 
00607       static _GLIBCXX_CONSTEXPR unsigned char 
00608       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00609 
00610       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00611       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00612       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00613       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00614 
00615       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00616       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00617       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00618       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00619        = denorm_absent;
00620       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00621 
00622       static _GLIBCXX_CONSTEXPR unsigned char 
00623       infinity() _GLIBCXX_USE_NOEXCEPT
00624       { return static_cast<unsigned char>(0); }
00625 
00626       static _GLIBCXX_CONSTEXPR unsigned char 
00627       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
00628       { return static_cast<unsigned char>(0); }
00629 
00630       static _GLIBCXX_CONSTEXPR unsigned char 
00631       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00632       { return static_cast<unsigned char>(0); }
00633 
00634       static _GLIBCXX_CONSTEXPR unsigned char 
00635       denorm_min() _GLIBCXX_USE_NOEXCEPT
00636       { return static_cast<unsigned char>(0); }
00637 
00638       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00639       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00640       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00641 
00642       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00643       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00644       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00645        = round_toward_zero;
00646     };
00647 
00648   /// numeric_limits<wchar_t> specialization.
00649   template<>
00650     struct numeric_limits<wchar_t>
00651     {
00652       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00653 
00654       static _GLIBCXX_CONSTEXPR wchar_t 
00655       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
00656 
00657       static _GLIBCXX_CONSTEXPR wchar_t 
00658       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
00659 
00660 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00661       static constexpr wchar_t
00662       lowest() noexcept { return min(); }
00663 #endif
00664 
00665       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
00666       static _GLIBCXX_USE_CONSTEXPR int digits10 
00667        = __glibcxx_digits10 (wchar_t);
00668 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00669       static constexpr int max_digits10 = 0;
00670 #endif
00671       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
00672       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00673       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00674       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00675 
00676       static _GLIBCXX_CONSTEXPR wchar_t 
00677       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00678 
00679       static _GLIBCXX_CONSTEXPR wchar_t 
00680       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00681 
00682       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00683       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00684       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00685       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00686 
00687       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00688       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00689       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00690       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00691        = denorm_absent;
00692       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00693 
00694       static _GLIBCXX_CONSTEXPR wchar_t 
00695       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00696 
00697       static _GLIBCXX_CONSTEXPR wchar_t 
00698       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00699 
00700       static _GLIBCXX_CONSTEXPR wchar_t 
00701       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00702 
00703       static _GLIBCXX_CONSTEXPR wchar_t 
00704       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00705 
00706       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00707       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00708       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00709 
00710       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00711       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00712       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00713        = round_toward_zero;
00714     };
00715 
00716 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00717   /// numeric_limits<char16_t> specialization.
00718   template<>
00719     struct numeric_limits<char16_t>
00720     {
00721       static constexpr bool is_specialized = true;
00722 
00723       static constexpr char16_t 
00724       min() noexcept { return __glibcxx_min (char16_t); }
00725 
00726       static constexpr char16_t 
00727       max() noexcept { return __glibcxx_max (char16_t); }
00728 
00729       static constexpr char16_t 
00730       lowest() noexcept { return min(); }
00731 
00732       static constexpr int digits = __glibcxx_digits (char16_t);
00733       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
00734       static constexpr int max_digits10 = 0;
00735       static constexpr bool is_signed = __glibcxx_signed (char16_t);
00736       static constexpr bool is_integer = true;
00737       static constexpr bool is_exact = true;
00738       static constexpr int radix = 2;
00739 
00740       static constexpr char16_t 
00741       epsilon() noexcept { return 0; }
00742 
00743       static constexpr char16_t 
00744       round_error() noexcept { return 0; }
00745 
00746       static constexpr int min_exponent = 0;
00747       static constexpr int min_exponent10 = 0;
00748       static constexpr int max_exponent = 0;
00749       static constexpr int max_exponent10 = 0;
00750 
00751       static constexpr bool has_infinity = false;
00752       static constexpr bool has_quiet_NaN = false;
00753       static constexpr bool has_signaling_NaN = false;
00754       static constexpr float_denorm_style has_denorm = denorm_absent;
00755       static constexpr bool has_denorm_loss = false;
00756 
00757       static constexpr char16_t 
00758       infinity() noexcept { return char16_t(); }
00759 
00760       static constexpr char16_t 
00761       quiet_NaN() noexcept { return char16_t(); }
00762 
00763       static constexpr char16_t 
00764       signaling_NaN() noexcept { return char16_t(); }
00765 
00766       static constexpr char16_t 
00767       denorm_min() noexcept { return char16_t(); }
00768 
00769       static constexpr bool is_iec559 = false;
00770       static constexpr bool is_bounded = true;
00771       static constexpr bool is_modulo = true;
00772 
00773       static constexpr bool traps = __glibcxx_integral_traps;
00774       static constexpr bool tinyness_before = false;
00775       static constexpr float_round_style round_style = round_toward_zero;
00776     };
00777 
00778   /// numeric_limits<char32_t> specialization.
00779   template<>
00780     struct numeric_limits<char32_t>
00781     {
00782       static constexpr bool is_specialized = true;
00783 
00784       static constexpr char32_t 
00785       min() noexcept { return __glibcxx_min (char32_t); }
00786 
00787       static constexpr char32_t 
00788       max() noexcept { return __glibcxx_max (char32_t); }
00789 
00790       static constexpr char32_t 
00791       lowest() noexcept { return min(); }
00792 
00793       static constexpr int digits = __glibcxx_digits (char32_t);
00794       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
00795       static constexpr int max_digits10 = 0;
00796       static constexpr bool is_signed = __glibcxx_signed (char32_t);
00797       static constexpr bool is_integer = true;
00798       static constexpr bool is_exact = true;
00799       static constexpr int radix = 2;
00800 
00801       static constexpr char32_t 
00802       epsilon() noexcept { return 0; }
00803 
00804       static constexpr char32_t 
00805       round_error() noexcept { return 0; }
00806 
00807       static constexpr int min_exponent = 0;
00808       static constexpr int min_exponent10 = 0;
00809       static constexpr int max_exponent = 0;
00810       static constexpr int max_exponent10 = 0;
00811 
00812       static constexpr bool has_infinity = false;
00813       static constexpr bool has_quiet_NaN = false;
00814       static constexpr bool has_signaling_NaN = false;
00815       static constexpr float_denorm_style has_denorm = denorm_absent;
00816       static constexpr bool has_denorm_loss = false;
00817 
00818       static constexpr char32_t 
00819       infinity() noexcept { return char32_t(); }
00820 
00821       static constexpr char32_t 
00822       quiet_NaN() noexcept { return char32_t(); }
00823 
00824       static constexpr char32_t 
00825       signaling_NaN() noexcept { return char32_t(); }
00826 
00827       static constexpr char32_t 
00828       denorm_min() noexcept { return char32_t(); }
00829 
00830       static constexpr bool is_iec559 = false;
00831       static constexpr bool is_bounded = true;
00832       static constexpr bool is_modulo = true;
00833 
00834       static constexpr bool traps = __glibcxx_integral_traps;
00835       static constexpr bool tinyness_before = false;
00836       static constexpr float_round_style round_style = round_toward_zero;
00837     };
00838 #endif
00839 
00840   /// numeric_limits<short> specialization.
00841   template<>
00842     struct numeric_limits<short>
00843     {
00844       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00845 
00846       static _GLIBCXX_CONSTEXPR short 
00847       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
00848 
00849       static _GLIBCXX_CONSTEXPR short 
00850       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
00851 
00852 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00853       static constexpr short 
00854       lowest() noexcept { return min(); }
00855 #endif
00856 
00857       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
00858       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
00859 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00860       static constexpr int max_digits10 = 0;
00861 #endif
00862       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
00863       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00864       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00865       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00866 
00867       static _GLIBCXX_CONSTEXPR short 
00868       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00869 
00870       static _GLIBCXX_CONSTEXPR short 
00871       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00872 
00873       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00874       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00875       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00876       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00877 
00878       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00879       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00880       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00881       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00882        = denorm_absent;
00883       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00884 
00885       static _GLIBCXX_CONSTEXPR short 
00886       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
00887 
00888       static _GLIBCXX_CONSTEXPR short 
00889       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
00890 
00891       static _GLIBCXX_CONSTEXPR short 
00892       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
00893 
00894       static _GLIBCXX_CONSTEXPR short 
00895       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
00896 
00897       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00898       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00899       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00900 
00901       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00902       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00903       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00904        = round_toward_zero;
00905     };
00906 
00907   /// numeric_limits<unsigned short> specialization.
00908   template<>
00909     struct numeric_limits<unsigned short>
00910     {
00911       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00912 
00913       static _GLIBCXX_CONSTEXPR unsigned short 
00914       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
00915 
00916       static _GLIBCXX_CONSTEXPR unsigned short 
00917       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
00918 
00919 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00920       static constexpr unsigned short 
00921       lowest() noexcept { return min(); }
00922 #endif
00923 
00924       static _GLIBCXX_USE_CONSTEXPR int digits 
00925        = __glibcxx_digits (unsigned short);
00926       static _GLIBCXX_USE_CONSTEXPR int digits10 
00927        = __glibcxx_digits10 (unsigned short);
00928 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00929       static constexpr int max_digits10 = 0;
00930 #endif
00931       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00932       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00933       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00934       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00935 
00936       static _GLIBCXX_CONSTEXPR unsigned short 
00937       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00938 
00939       static _GLIBCXX_CONSTEXPR unsigned short 
00940       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00941 
00942       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00943       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00944       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00945       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00946 
00947       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00948       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00949       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00950       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00951        = denorm_absent;
00952       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00953 
00954       static _GLIBCXX_CONSTEXPR unsigned short 
00955       infinity() _GLIBCXX_USE_NOEXCEPT
00956       { return static_cast<unsigned short>(0); }
00957 
00958       static _GLIBCXX_CONSTEXPR unsigned short 
00959       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
00960       { return static_cast<unsigned short>(0); }
00961 
00962       static _GLIBCXX_CONSTEXPR unsigned short 
00963       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00964       { return static_cast<unsigned short>(0); }
00965 
00966       static _GLIBCXX_CONSTEXPR unsigned short 
00967       denorm_min() _GLIBCXX_USE_NOEXCEPT
00968       { return static_cast<unsigned short>(0); }
00969 
00970       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00971       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00972       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00973 
00974       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00975       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00976       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00977        = round_toward_zero;
00978     };
00979 
00980   /// numeric_limits<int> specialization.
00981   template<>
00982     struct numeric_limits<int>
00983     {
00984       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00985 
00986       static _GLIBCXX_CONSTEXPR int 
00987       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
00988 
00989       static _GLIBCXX_CONSTEXPR int 
00990       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
00991 
00992 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00993       static constexpr int 
00994       lowest() noexcept { return min(); }
00995 #endif
00996 
00997       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
00998       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
00999 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01000       static constexpr int max_digits10 = 0;
01001 #endif
01002       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01003       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01004       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01005       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01006 
01007       static _GLIBCXX_CONSTEXPR int 
01008       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01009 
01010       static _GLIBCXX_CONSTEXPR int 
01011       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01012 
01013       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01014       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01015       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01016       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01017 
01018       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01019       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01020       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01021       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01022        = denorm_absent;
01023       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01024 
01025       static _GLIBCXX_CONSTEXPR int 
01026       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01027 
01028       static _GLIBCXX_CONSTEXPR int 
01029       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01030 
01031       static _GLIBCXX_CONSTEXPR int 
01032       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01033 
01034       static _GLIBCXX_CONSTEXPR int 
01035       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01036 
01037       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01038       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01039       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01040 
01041       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01042       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01043       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01044        = round_toward_zero;
01045     };
01046 
01047   /// numeric_limits<unsigned int> specialization.
01048   template<>
01049     struct numeric_limits<unsigned int>
01050     {
01051       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01052 
01053       static _GLIBCXX_CONSTEXPR unsigned int 
01054       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01055 
01056       static _GLIBCXX_CONSTEXPR unsigned int 
01057       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
01058 
01059 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01060       static constexpr unsigned int 
01061       lowest() noexcept { return min(); }
01062 #endif
01063 
01064       static _GLIBCXX_USE_CONSTEXPR int digits 
01065        = __glibcxx_digits (unsigned int);
01066       static _GLIBCXX_USE_CONSTEXPR int digits10 
01067        = __glibcxx_digits10 (unsigned int);
01068 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01069       static constexpr int max_digits10 = 0;
01070 #endif
01071       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01072       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01073       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01074       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01075 
01076       static _GLIBCXX_CONSTEXPR unsigned int 
01077       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01078 
01079       static _GLIBCXX_CONSTEXPR unsigned int 
01080       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01081 
01082       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01083       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01084       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01085       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01086 
01087       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01088       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01089       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01090       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01091        = denorm_absent;
01092       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01093 
01094       static _GLIBCXX_CONSTEXPR unsigned int 
01095       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
01096 
01097       static _GLIBCXX_CONSTEXPR unsigned int 
01098       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01099       { return static_cast<unsigned int>(0); }
01100 
01101       static _GLIBCXX_CONSTEXPR unsigned int 
01102       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01103       { return static_cast<unsigned int>(0); }
01104 
01105       static _GLIBCXX_CONSTEXPR unsigned int 
01106       denorm_min() _GLIBCXX_USE_NOEXCEPT
01107       { return static_cast<unsigned int>(0); }
01108 
01109       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01110       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01111       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01112 
01113       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01114       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01115       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01116        = round_toward_zero;
01117     };
01118 
01119   /// numeric_limits<long> specialization.
01120   template<>
01121     struct numeric_limits<long>
01122     {
01123       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01124 
01125       static _GLIBCXX_CONSTEXPR long
01126       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
01127 
01128       static _GLIBCXX_CONSTEXPR long 
01129       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
01130 
01131 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01132       static constexpr long 
01133       lowest() noexcept { return min(); }
01134 #endif
01135 
01136       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
01137       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
01138 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01139       static constexpr int max_digits10 = 0;
01140 #endif
01141       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01142       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01143       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01144       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01145 
01146       static _GLIBCXX_CONSTEXPR long 
01147       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01148 
01149       static _GLIBCXX_CONSTEXPR long 
01150       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01151 
01152       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01153       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01154       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01155       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01156 
01157       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01158       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01159       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01160       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01161        = denorm_absent;
01162       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01163 
01164       static _GLIBCXX_CONSTEXPR long 
01165       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01166 
01167       static _GLIBCXX_CONSTEXPR long 
01168       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01169 
01170       static _GLIBCXX_CONSTEXPR long 
01171       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01172 
01173       static _GLIBCXX_CONSTEXPR long 
01174       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01175 
01176       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01177       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01178       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01179 
01180       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01181       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01182       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01183        = round_toward_zero;
01184     };
01185 
01186   /// numeric_limits<unsigned long> specialization.
01187   template<>
01188     struct numeric_limits<unsigned long>
01189     {
01190       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01191 
01192       static _GLIBCXX_CONSTEXPR unsigned long 
01193       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01194 
01195       static _GLIBCXX_CONSTEXPR unsigned long 
01196       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
01197 
01198 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01199       static constexpr unsigned long 
01200       lowest() noexcept { return min(); }
01201 #endif
01202 
01203       static _GLIBCXX_USE_CONSTEXPR int digits 
01204        = __glibcxx_digits (unsigned long);
01205       static _GLIBCXX_USE_CONSTEXPR int digits10 
01206        = __glibcxx_digits10 (unsigned long);
01207 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01208       static constexpr int max_digits10 = 0;
01209 #endif
01210       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01211       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01212       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01213       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01214 
01215       static _GLIBCXX_CONSTEXPR unsigned long 
01216       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01217 
01218       static _GLIBCXX_CONSTEXPR unsigned long 
01219       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01220 
01221       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01222       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01223       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01224       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01225 
01226       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01227       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01228       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01229       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01230        = denorm_absent;
01231       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01232 
01233       static _GLIBCXX_CONSTEXPR unsigned long 
01234       infinity() _GLIBCXX_USE_NOEXCEPT
01235       { return static_cast<unsigned long>(0); }
01236 
01237       static _GLIBCXX_CONSTEXPR unsigned long 
01238       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01239       { return static_cast<unsigned long>(0); }
01240 
01241       static _GLIBCXX_CONSTEXPR unsigned long 
01242       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01243       { return static_cast<unsigned long>(0); }
01244 
01245       static _GLIBCXX_CONSTEXPR unsigned long 
01246       denorm_min() _GLIBCXX_USE_NOEXCEPT
01247       { return static_cast<unsigned long>(0); }
01248 
01249       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01250       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01251       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01252 
01253       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01254       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01255       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01256        = round_toward_zero;
01257     };
01258 
01259   /// numeric_limits<long long> specialization.
01260   template<>
01261     struct numeric_limits<long long>
01262     {
01263       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01264 
01265       static _GLIBCXX_CONSTEXPR long long 
01266       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
01267 
01268       static _GLIBCXX_CONSTEXPR long long 
01269       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
01270 
01271 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01272       static constexpr long long 
01273       lowest() noexcept { return min(); }
01274 #endif
01275 
01276       static _GLIBCXX_USE_CONSTEXPR int digits 
01277        = __glibcxx_digits (long long);
01278       static _GLIBCXX_USE_CONSTEXPR int digits10 
01279        = __glibcxx_digits10 (long long);
01280 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01281       static constexpr int max_digits10 = 0;
01282 #endif
01283       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01284       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01285       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01286       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01287 
01288       static _GLIBCXX_CONSTEXPR long long 
01289       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01290 
01291       static _GLIBCXX_CONSTEXPR long long 
01292       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01293 
01294       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01295       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01296       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01297       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01298 
01299       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01300       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01301       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01302       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01303        = denorm_absent;
01304       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01305 
01306       static _GLIBCXX_CONSTEXPR long long 
01307       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01308 
01309       static _GLIBCXX_CONSTEXPR long long 
01310       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01311 
01312       static _GLIBCXX_CONSTEXPR long long 
01313       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01314       { return static_cast<long long>(0); }
01315 
01316       static _GLIBCXX_CONSTEXPR long long 
01317       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01318 
01319       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01320       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01321       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01322 
01323       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01324       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01325       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01326        = round_toward_zero;
01327     };
01328 
01329   /// numeric_limits<unsigned long long> specialization.
01330   template<>
01331     struct numeric_limits<unsigned long long>
01332     {
01333       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01334 
01335       static _GLIBCXX_CONSTEXPR unsigned long long 
01336       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01337 
01338       static _GLIBCXX_CONSTEXPR unsigned long long 
01339       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
01340 
01341 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01342       static constexpr unsigned long long 
01343       lowest() noexcept { return min(); }
01344 #endif
01345 
01346       static _GLIBCXX_USE_CONSTEXPR int digits 
01347        = __glibcxx_digits (unsigned long long);
01348       static _GLIBCXX_USE_CONSTEXPR int digits10 
01349        = __glibcxx_digits10 (unsigned long long);
01350 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01351       static constexpr int max_digits10 = 0;
01352 #endif
01353       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01354       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01355       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01356       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01357 
01358       static _GLIBCXX_CONSTEXPR unsigned long long 
01359       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01360 
01361       static _GLIBCXX_CONSTEXPR unsigned long long 
01362       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01363 
01364       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01365       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01366       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01367       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01368 
01369       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01370       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01371       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01372       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01373        = denorm_absent;
01374       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01375 
01376       static _GLIBCXX_CONSTEXPR unsigned long long 
01377       infinity() _GLIBCXX_USE_NOEXCEPT
01378       { return static_cast<unsigned long long>(0); }
01379 
01380       static _GLIBCXX_CONSTEXPR unsigned long long 
01381       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01382       { return static_cast<unsigned long long>(0); }
01383 
01384       static _GLIBCXX_CONSTEXPR unsigned long long 
01385       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01386       { return static_cast<unsigned long long>(0); }
01387 
01388       static _GLIBCXX_CONSTEXPR unsigned long long 
01389       denorm_min() _GLIBCXX_USE_NOEXCEPT
01390       { return static_cast<unsigned long long>(0); }
01391 
01392       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01393       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01394       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01395 
01396       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01397       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01398       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01399        = round_toward_zero;
01400     };
01401 
01402 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
01403   /// numeric_limits<__int128> specialization.
01404   template<>
01405     struct numeric_limits<__int128>
01406     {
01407       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01408 
01409       static _GLIBCXX_CONSTEXPR __int128
01410       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
01411 
01412       static _GLIBCXX_CONSTEXPR __int128
01413       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
01414 
01415 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01416       static constexpr __int128
01417       lowest() noexcept { return min(); }
01418 #endif
01419 
01420       static _GLIBCXX_USE_CONSTEXPR int digits
01421        = __glibcxx_digits (__int128);
01422       static _GLIBCXX_USE_CONSTEXPR int digits10
01423        = __glibcxx_digits10 (__int128);
01424 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01425       static constexpr int max_digits10 = 0;
01426 #endif
01427       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01428       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01429       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01430       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01431 
01432       static _GLIBCXX_CONSTEXPR __int128
01433       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01434 
01435       static _GLIBCXX_CONSTEXPR __int128
01436       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01437 
01438       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01439       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01440       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01441       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01442 
01443       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01444       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01445       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01446       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01447        = denorm_absent;
01448       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01449 
01450       static _GLIBCXX_CONSTEXPR __int128
01451       infinity() _GLIBCXX_USE_NOEXCEPT
01452       { return static_cast<__int128>(0); }
01453 
01454       static _GLIBCXX_CONSTEXPR __int128
01455       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01456       { return static_cast<__int128>(0); }
01457       
01458       static _GLIBCXX_CONSTEXPR __int128
01459       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01460       { return static_cast<__int128>(0); }
01461       
01462       static _GLIBCXX_CONSTEXPR __int128
01463       denorm_min() _GLIBCXX_USE_NOEXCEPT
01464       { return static_cast<__int128>(0); }
01465 
01466       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01467       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01468       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01469 
01470       static _GLIBCXX_USE_CONSTEXPR bool traps
01471        = __glibcxx_integral_traps;
01472       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01473       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
01474        = round_toward_zero;
01475     };
01476 
01477   /// numeric_limits<unsigned __int128> specialization.
01478   template<>
01479     struct numeric_limits<unsigned __int128>
01480     {
01481       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01482 
01483       static _GLIBCXX_CONSTEXPR unsigned __int128
01484       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01485 
01486       static _GLIBCXX_CONSTEXPR unsigned __int128
01487       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
01488 
01489 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01490       static constexpr unsigned __int128
01491       lowest() noexcept { return min(); }
01492 #endif
01493 
01494       static _GLIBCXX_USE_CONSTEXPR int digits
01495        = __glibcxx_digits (unsigned __int128);
01496       static _GLIBCXX_USE_CONSTEXPR int digits10
01497        = __glibcxx_digits10 (unsigned __int128);
01498 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01499       static constexpr int max_digits10 = 0;
01500 #endif
01501       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01502       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01503       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01504       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01505 
01506       static _GLIBCXX_CONSTEXPR unsigned __int128
01507       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01508 
01509       static _GLIBCXX_CONSTEXPR unsigned __int128
01510       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01511 
01512       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01513       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01514       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01515       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01516 
01517       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01518       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01519       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01520       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01521        = denorm_absent;
01522       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01523 
01524       static _GLIBCXX_CONSTEXPR unsigned __int128
01525       infinity() _GLIBCXX_USE_NOEXCEPT
01526       { return static_cast<unsigned __int128>(0); }
01527 
01528       static _GLIBCXX_CONSTEXPR unsigned __int128
01529       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01530       { return static_cast<unsigned __int128>(0); }
01531 
01532       static _GLIBCXX_CONSTEXPR unsigned __int128
01533       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01534       { return static_cast<unsigned __int128>(0); }
01535 
01536       static _GLIBCXX_CONSTEXPR unsigned __int128
01537       denorm_min() _GLIBCXX_USE_NOEXCEPT
01538       { return static_cast<unsigned __int128>(0); }
01539 
01540       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01541       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01542       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01543 
01544       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01545       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01546       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
01547        = round_toward_zero;
01548     };
01549 #endif
01550 
01551   /// numeric_limits<float> specialization.
01552   template<>
01553     struct numeric_limits<float>
01554     {
01555       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01556 
01557       static _GLIBCXX_CONSTEXPR float 
01558       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
01559 
01560       static _GLIBCXX_CONSTEXPR float 
01561       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
01562 
01563 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01564       static constexpr float 
01565       lowest() noexcept { return -__FLT_MAX__; }
01566 #endif
01567 
01568       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
01569       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
01570 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01571       static constexpr int max_digits10
01572      = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
01573 #endif
01574       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01575       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01576       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01577       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01578 
01579       static _GLIBCXX_CONSTEXPR float 
01580       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
01581 
01582       static _GLIBCXX_CONSTEXPR float 
01583       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
01584 
01585       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
01586       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
01587       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
01588       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
01589 
01590       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
01591       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
01592       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01593       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01594     = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
01595       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
01596        = __glibcxx_float_has_denorm_loss;
01597 
01598       static _GLIBCXX_CONSTEXPR float 
01599       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
01600 
01601       static _GLIBCXX_CONSTEXPR float 
01602       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
01603 
01604       static _GLIBCXX_CONSTEXPR float 
01605       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
01606 
01607       static _GLIBCXX_CONSTEXPR float 
01608       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
01609 
01610       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01611     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01612       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01613       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01614 
01615       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
01616       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
01617        = __glibcxx_float_tinyness_before;
01618       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01619        = round_to_nearest;
01620     };
01621 
01622 #undef __glibcxx_float_has_denorm_loss
01623 #undef __glibcxx_float_traps
01624 #undef __glibcxx_float_tinyness_before
01625 
01626   /// numeric_limits<double> specialization.
01627   template<>
01628     struct numeric_limits<double>
01629     {
01630       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01631 
01632       static _GLIBCXX_CONSTEXPR double 
01633       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
01634 
01635       static _GLIBCXX_CONSTEXPR double 
01636       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
01637 
01638 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01639       static constexpr double 
01640       lowest() noexcept { return -__DBL_MAX__; }
01641 #endif
01642 
01643       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
01644       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
01645 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01646       static constexpr int max_digits10
01647      = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
01648 #endif
01649       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01650       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01651       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01652       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01653 
01654       static _GLIBCXX_CONSTEXPR double 
01655       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
01656 
01657       static _GLIBCXX_CONSTEXPR double 
01658       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
01659 
01660       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
01661       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
01662       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
01663       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
01664 
01665       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
01666       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
01667       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01668       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01669     = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
01670       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
01671         = __glibcxx_double_has_denorm_loss;
01672 
01673       static _GLIBCXX_CONSTEXPR double 
01674       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
01675 
01676       static _GLIBCXX_CONSTEXPR double 
01677       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
01678 
01679       static _GLIBCXX_CONSTEXPR double 
01680       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
01681 
01682       static _GLIBCXX_CONSTEXPR double 
01683       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
01684 
01685       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01686     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01687       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01688       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01689 
01690       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
01691       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
01692        = __glibcxx_double_tinyness_before;
01693       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01694        = round_to_nearest;
01695     };
01696 
01697 #undef __glibcxx_double_has_denorm_loss
01698 #undef __glibcxx_double_traps
01699 #undef __glibcxx_double_tinyness_before
01700 
01701   /// numeric_limits<long double> specialization.
01702   template<>
01703     struct numeric_limits<long double>
01704     {
01705       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01706 
01707       static _GLIBCXX_CONSTEXPR long double 
01708       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
01709 
01710       static _GLIBCXX_CONSTEXPR long double 
01711       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
01712 
01713 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01714       static constexpr long double 
01715       lowest() noexcept { return -__LDBL_MAX__; }
01716 #endif
01717 
01718       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
01719       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
01720 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01721       static _GLIBCXX_USE_CONSTEXPR int max_digits10
01722      = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
01723 #endif
01724       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01725       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01726       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01727       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01728 
01729       static _GLIBCXX_CONSTEXPR long double 
01730       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
01731 
01732       static _GLIBCXX_CONSTEXPR long double 
01733       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
01734 
01735       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
01736       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
01737       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
01738       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
01739 
01740       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
01741       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
01742       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01743       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01744     = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
01745       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
01746     = __glibcxx_long_double_has_denorm_loss;
01747 
01748       static _GLIBCXX_CONSTEXPR long double 
01749       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
01750 
01751       static _GLIBCXX_CONSTEXPR long double 
01752       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
01753 
01754       static _GLIBCXX_CONSTEXPR long double 
01755       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
01756 
01757       static _GLIBCXX_CONSTEXPR long double 
01758       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
01759 
01760       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01761     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01762       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01763       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01764 
01765       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
01766       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 
01767                      __glibcxx_long_double_tinyness_before;
01768       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
01769                               round_to_nearest;
01770     };
01771 
01772 #undef __glibcxx_long_double_has_denorm_loss
01773 #undef __glibcxx_long_double_traps
01774 #undef __glibcxx_long_double_tinyness_before
01775 
01776 _GLIBCXX_END_NAMESPACE_VERSION
01777 } // namespace
01778 
01779 #undef __glibcxx_signed
01780 #undef __glibcxx_min
01781 #undef __glibcxx_max
01782 #undef __glibcxx_digits
01783 #undef __glibcxx_digits10
01784 #undef __glibcxx_max_digits10
01785 
01786 #endif // _GLIBCXX_NUMERIC_LIMITS