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. A type is modulo if, for any
00274     operation involving +, -, or * on values of that type whose
00275     result would fall outside the range [min(),max()], the value
00276     returned differs from the true value by an integer multiple of
00277     max() - min() + 1. On most machines, this is false for floating
00278     types, true for unsigned integers, and true for signed integers.
00279     See PR22200 about signed integers.  */
00280     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00281 
00282     /** True if trapping is implemented for this type.  */
00283     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
00284 
00285     /** True if tininess is detected before rounding.  (see IEC 559)  */
00286     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00287 
00288     /** See std::float_round_style for more information.  This is only
00289     meaningful for floating types; integer types will all be
00290     round_toward_zero.  */
00291     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
00292                             round_toward_zero;
00293   };
00294 
00295   /**
00296    *  @brief Properties of fundamental types.
00297    *
00298    *  This class allows a program to obtain information about the
00299    *  representation of a fundamental type on a given platform.  For
00300    *  non-fundamental types, the functions will return 0 and the data
00301    *  members will all be @c false.
00302    *
00303    *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
00304    *  noted, but not incorporated in this documented (yet).
00305   */
00306   template<typename _Tp>
00307     struct numeric_limits : public __numeric_limits_base
00308     {
00309       /** The minimum finite value, or for floating types with
00310       denormalization, the minimum positive normalized value.  */
00311       static _GLIBCXX_CONSTEXPR _Tp
00312       min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00313 
00314       /** The maximum finite value.  */
00315       static _GLIBCXX_CONSTEXPR _Tp
00316       max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00317 
00318 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00319       /** A finite value x such that there is no other finite value y
00320        *  where y < x.  */
00321       static constexpr _Tp
00322       lowest() noexcept { return _Tp(); }
00323 #endif
00324 
00325       /** The @e machine @e epsilon:  the difference between 1 and the least
00326       value greater than 1 that is representable.  */
00327       static _GLIBCXX_CONSTEXPR _Tp
00328       epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00329 
00330       /** The maximum rounding error measurement (see LIA-1).  */
00331       static _GLIBCXX_CONSTEXPR _Tp
00332       round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00333 
00334       /** The representation of positive infinity, if @c has_infinity.  */
00335       static _GLIBCXX_CONSTEXPR _Tp
00336       infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00337 
00338       /** The representation of a quiet <em>Not a Number</em>,
00339       if @c has_quiet_NaN. */
00340       static _GLIBCXX_CONSTEXPR _Tp
00341       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00342 
00343       /** The representation of a signaling <em>Not a Number</em>, if
00344       @c has_signaling_NaN. */
00345       static _GLIBCXX_CONSTEXPR _Tp
00346       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00347 
00348       /** The minimum positive denormalized value.  For types where
00349       @c has_denorm is false, this is the minimum positive normalized
00350       value.  */
00351       static _GLIBCXX_CONSTEXPR _Tp
00352       denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
00353     };
00354 
00355 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00356   template<typename _Tp>
00357     struct numeric_limits<const _Tp>
00358     : public numeric_limits<_Tp> { };
00359 
00360   template<typename _Tp>
00361     struct numeric_limits<volatile _Tp>
00362     : public numeric_limits<_Tp> { };
00363 
00364   template<typename _Tp>
00365     struct numeric_limits<const volatile _Tp>
00366     : public numeric_limits<_Tp> { };
00367 #endif
00368 
00369   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
00370   // you get the count right. (18 in c++0x mode)
00371 
00372   /// numeric_limits<bool> specialization.
00373   template<>
00374     struct numeric_limits<bool>
00375     {
00376       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00377 
00378       static _GLIBCXX_CONSTEXPR bool 
00379       min() _GLIBCXX_USE_NOEXCEPT { return false; }
00380 
00381       static _GLIBCXX_CONSTEXPR bool 
00382       max() _GLIBCXX_USE_NOEXCEPT { return true; }
00383 
00384 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00385       static constexpr bool
00386       lowest() noexcept { return min(); }
00387 #endif
00388       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
00389       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
00390 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00391       static constexpr int max_digits10 = 0;
00392 #endif
00393       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00394       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00395       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00396       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00397 
00398       static _GLIBCXX_CONSTEXPR bool 
00399       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
00400 
00401       static _GLIBCXX_CONSTEXPR bool 
00402       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
00403 
00404       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00405       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00406       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00407       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00408 
00409       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00410       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00411       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00412       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00413        = denorm_absent;
00414       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00415 
00416       static _GLIBCXX_CONSTEXPR bool 
00417       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
00418 
00419       static _GLIBCXX_CONSTEXPR bool 
00420       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
00421 
00422       static _GLIBCXX_CONSTEXPR bool 
00423       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
00424 
00425       static _GLIBCXX_CONSTEXPR bool 
00426       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
00427 
00428       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00429       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00430       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00431 
00432       // It is not clear what it means for a boolean type to trap.
00433       // This is a DR on the LWG issue list.  Here, I use integer
00434       // promotion semantics.
00435       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00436       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00437       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00438        = round_toward_zero;
00439     };
00440 
00441   /// numeric_limits<char> specialization.
00442   template<>
00443     struct numeric_limits<char>
00444     {
00445       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00446 
00447       static _GLIBCXX_CONSTEXPR char 
00448       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
00449 
00450       static _GLIBCXX_CONSTEXPR char 
00451       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
00452 
00453 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00454       static constexpr char 
00455       lowest() noexcept { return min(); }
00456 #endif
00457 
00458       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
00459       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
00460 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00461       static constexpr int max_digits10 = 0;
00462 #endif
00463       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
00464       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00465       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00466       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00467 
00468       static _GLIBCXX_CONSTEXPR char 
00469       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00470 
00471       static _GLIBCXX_CONSTEXPR char 
00472       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00473 
00474       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00475       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00476       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00477       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00478 
00479       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00480       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00481       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00482       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00483        = denorm_absent;
00484       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00485 
00486       static _GLIBCXX_CONSTEXPR 
00487       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
00488 
00489       static _GLIBCXX_CONSTEXPR char 
00490       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
00491 
00492       static _GLIBCXX_CONSTEXPR char 
00493       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
00494 
00495       static _GLIBCXX_CONSTEXPR char 
00496       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
00497 
00498       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00499       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00500       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
00501 
00502       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00503       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00504       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00505        = round_toward_zero;
00506     };
00507 
00508   /// numeric_limits<signed char> specialization.
00509   template<>
00510     struct numeric_limits<signed char>
00511     {
00512       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00513 
00514       static _GLIBCXX_CONSTEXPR signed char 
00515       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
00516 
00517       static _GLIBCXX_CONSTEXPR signed char 
00518       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
00519 
00520 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00521       static constexpr signed char 
00522       lowest() noexcept { return min(); }
00523 #endif
00524 
00525       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
00526       static _GLIBCXX_USE_CONSTEXPR int digits10 
00527        = __glibcxx_digits10 (signed char);
00528 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00529       static constexpr int max_digits10 = 0;
00530 #endif
00531       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
00532       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00533       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00534       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00535 
00536       static _GLIBCXX_CONSTEXPR signed char 
00537       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00538 
00539       static _GLIBCXX_CONSTEXPR signed char 
00540       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00541 
00542       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00543       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00544       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00545       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00546 
00547       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00548       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00549       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00550       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00551        = denorm_absent;
00552       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00553 
00554       static _GLIBCXX_CONSTEXPR signed char 
00555       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
00556 
00557       static _GLIBCXX_CONSTEXPR signed char 
00558       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
00559 
00560       static _GLIBCXX_CONSTEXPR signed char 
00561       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00562       { return static_cast<signed char>(0); }
00563 
00564       static _GLIBCXX_CONSTEXPR signed char 
00565       denorm_min() _GLIBCXX_USE_NOEXCEPT
00566       { return static_cast<signed char>(0); }
00567 
00568       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00569       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00570       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00571 
00572       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00573       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00574       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00575        = round_toward_zero;
00576     };
00577 
00578   /// numeric_limits<unsigned char> specialization.
00579   template<>
00580     struct numeric_limits<unsigned char>
00581     {
00582       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00583 
00584       static _GLIBCXX_CONSTEXPR unsigned char 
00585       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
00586 
00587       static _GLIBCXX_CONSTEXPR unsigned char 
00588       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
00589 
00590 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00591       static constexpr unsigned char 
00592       lowest() noexcept { return min(); }
00593 #endif
00594 
00595       static _GLIBCXX_USE_CONSTEXPR int digits 
00596        = __glibcxx_digits (unsigned char);
00597       static _GLIBCXX_USE_CONSTEXPR int digits10 
00598        = __glibcxx_digits10 (unsigned char);
00599 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00600       static constexpr int max_digits10 = 0;
00601 #endif
00602       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00603       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00604       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00605       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00606 
00607       static _GLIBCXX_CONSTEXPR unsigned char 
00608       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00609 
00610       static _GLIBCXX_CONSTEXPR unsigned char 
00611       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00612 
00613       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00614       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00615       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00616       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00617 
00618       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00619       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00620       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00621       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00622        = denorm_absent;
00623       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00624 
00625       static _GLIBCXX_CONSTEXPR unsigned char 
00626       infinity() _GLIBCXX_USE_NOEXCEPT
00627       { return static_cast<unsigned char>(0); }
00628 
00629       static _GLIBCXX_CONSTEXPR unsigned char 
00630       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
00631       { return static_cast<unsigned char>(0); }
00632 
00633       static _GLIBCXX_CONSTEXPR unsigned char 
00634       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00635       { return static_cast<unsigned char>(0); }
00636 
00637       static _GLIBCXX_CONSTEXPR unsigned char 
00638       denorm_min() _GLIBCXX_USE_NOEXCEPT
00639       { return static_cast<unsigned char>(0); }
00640 
00641       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00642       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00643       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00644 
00645       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00646       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00647       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00648        = round_toward_zero;
00649     };
00650 
00651   /// numeric_limits<wchar_t> specialization.
00652   template<>
00653     struct numeric_limits<wchar_t>
00654     {
00655       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00656 
00657       static _GLIBCXX_CONSTEXPR wchar_t 
00658       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
00659 
00660       static _GLIBCXX_CONSTEXPR wchar_t 
00661       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
00662 
00663 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00664       static constexpr wchar_t
00665       lowest() noexcept { return min(); }
00666 #endif
00667 
00668       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
00669       static _GLIBCXX_USE_CONSTEXPR int digits10 
00670        = __glibcxx_digits10 (wchar_t);
00671 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00672       static constexpr int max_digits10 = 0;
00673 #endif
00674       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
00675       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00676       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00677       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00678 
00679       static _GLIBCXX_CONSTEXPR wchar_t 
00680       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00681 
00682       static _GLIBCXX_CONSTEXPR wchar_t 
00683       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00684 
00685       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00686       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00687       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00688       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00689 
00690       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00691       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00692       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00693       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00694        = denorm_absent;
00695       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00696 
00697       static _GLIBCXX_CONSTEXPR wchar_t 
00698       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00699 
00700       static _GLIBCXX_CONSTEXPR wchar_t 
00701       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00702 
00703       static _GLIBCXX_CONSTEXPR wchar_t 
00704       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00705 
00706       static _GLIBCXX_CONSTEXPR wchar_t 
00707       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
00708 
00709       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00710       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00711       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
00712 
00713       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00714       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00715       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00716        = round_toward_zero;
00717     };
00718 
00719 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00720   /// numeric_limits<char16_t> specialization.
00721   template<>
00722     struct numeric_limits<char16_t>
00723     {
00724       static constexpr bool is_specialized = true;
00725 
00726       static constexpr char16_t 
00727       min() noexcept { return __glibcxx_min (char16_t); }
00728 
00729       static constexpr char16_t 
00730       max() noexcept { return __glibcxx_max (char16_t); }
00731 
00732       static constexpr char16_t 
00733       lowest() noexcept { return min(); }
00734 
00735       static constexpr int digits = __glibcxx_digits (char16_t);
00736       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
00737       static constexpr int max_digits10 = 0;
00738       static constexpr bool is_signed = __glibcxx_signed (char16_t);
00739       static constexpr bool is_integer = true;
00740       static constexpr bool is_exact = true;
00741       static constexpr int radix = 2;
00742 
00743       static constexpr char16_t 
00744       epsilon() noexcept { return 0; }
00745 
00746       static constexpr char16_t 
00747       round_error() noexcept { return 0; }
00748 
00749       static constexpr int min_exponent = 0;
00750       static constexpr int min_exponent10 = 0;
00751       static constexpr int max_exponent = 0;
00752       static constexpr int max_exponent10 = 0;
00753 
00754       static constexpr bool has_infinity = false;
00755       static constexpr bool has_quiet_NaN = false;
00756       static constexpr bool has_signaling_NaN = false;
00757       static constexpr float_denorm_style has_denorm = denorm_absent;
00758       static constexpr bool has_denorm_loss = false;
00759 
00760       static constexpr char16_t 
00761       infinity() noexcept { return char16_t(); }
00762 
00763       static constexpr char16_t 
00764       quiet_NaN() noexcept { return char16_t(); }
00765 
00766       static constexpr char16_t 
00767       signaling_NaN() noexcept { return char16_t(); }
00768 
00769       static constexpr char16_t 
00770       denorm_min() noexcept { return char16_t(); }
00771 
00772       static constexpr bool is_iec559 = false;
00773       static constexpr bool is_bounded = true;
00774       static constexpr bool is_modulo = !is_signed;
00775 
00776       static constexpr bool traps = __glibcxx_integral_traps;
00777       static constexpr bool tinyness_before = false;
00778       static constexpr float_round_style round_style = round_toward_zero;
00779     };
00780 
00781   /// numeric_limits<char32_t> specialization.
00782   template<>
00783     struct numeric_limits<char32_t>
00784     {
00785       static constexpr bool is_specialized = true;
00786 
00787       static constexpr char32_t 
00788       min() noexcept { return __glibcxx_min (char32_t); }
00789 
00790       static constexpr char32_t 
00791       max() noexcept { return __glibcxx_max (char32_t); }
00792 
00793       static constexpr char32_t 
00794       lowest() noexcept { return min(); }
00795 
00796       static constexpr int digits = __glibcxx_digits (char32_t);
00797       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
00798       static constexpr int max_digits10 = 0;
00799       static constexpr bool is_signed = __glibcxx_signed (char32_t);
00800       static constexpr bool is_integer = true;
00801       static constexpr bool is_exact = true;
00802       static constexpr int radix = 2;
00803 
00804       static constexpr char32_t 
00805       epsilon() noexcept { return 0; }
00806 
00807       static constexpr char32_t 
00808       round_error() noexcept { return 0; }
00809 
00810       static constexpr int min_exponent = 0;
00811       static constexpr int min_exponent10 = 0;
00812       static constexpr int max_exponent = 0;
00813       static constexpr int max_exponent10 = 0;
00814 
00815       static constexpr bool has_infinity = false;
00816       static constexpr bool has_quiet_NaN = false;
00817       static constexpr bool has_signaling_NaN = false;
00818       static constexpr float_denorm_style has_denorm = denorm_absent;
00819       static constexpr bool has_denorm_loss = false;
00820 
00821       static constexpr char32_t 
00822       infinity() noexcept { return char32_t(); }
00823 
00824       static constexpr char32_t 
00825       quiet_NaN() noexcept { return char32_t(); }
00826 
00827       static constexpr char32_t 
00828       signaling_NaN() noexcept { return char32_t(); }
00829 
00830       static constexpr char32_t 
00831       denorm_min() noexcept { return char32_t(); }
00832 
00833       static constexpr bool is_iec559 = false;
00834       static constexpr bool is_bounded = true;
00835       static constexpr bool is_modulo = !is_signed;
00836 
00837       static constexpr bool traps = __glibcxx_integral_traps;
00838       static constexpr bool tinyness_before = false;
00839       static constexpr float_round_style round_style = round_toward_zero;
00840     };
00841 #endif
00842 
00843   /// numeric_limits<short> specialization.
00844   template<>
00845     struct numeric_limits<short>
00846     {
00847       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00848 
00849       static _GLIBCXX_CONSTEXPR short 
00850       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
00851 
00852       static _GLIBCXX_CONSTEXPR short 
00853       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
00854 
00855 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00856       static constexpr short 
00857       lowest() noexcept { return min(); }
00858 #endif
00859 
00860       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
00861       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
00862 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00863       static constexpr int max_digits10 = 0;
00864 #endif
00865       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
00866       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00867       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00868       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00869 
00870       static _GLIBCXX_CONSTEXPR short 
00871       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00872 
00873       static _GLIBCXX_CONSTEXPR short 
00874       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00875 
00876       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00877       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00878       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00879       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00880 
00881       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00882       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00883       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00884       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00885        = denorm_absent;
00886       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00887 
00888       static _GLIBCXX_CONSTEXPR short 
00889       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
00890 
00891       static _GLIBCXX_CONSTEXPR short 
00892       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
00893 
00894       static _GLIBCXX_CONSTEXPR short 
00895       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
00896 
00897       static _GLIBCXX_CONSTEXPR short 
00898       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
00899 
00900       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00901       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00902       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
00903 
00904       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00905       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00906       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00907        = round_toward_zero;
00908     };
00909 
00910   /// numeric_limits<unsigned short> specialization.
00911   template<>
00912     struct numeric_limits<unsigned short>
00913     {
00914       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00915 
00916       static _GLIBCXX_CONSTEXPR unsigned short 
00917       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
00918 
00919       static _GLIBCXX_CONSTEXPR unsigned short 
00920       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
00921 
00922 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00923       static constexpr unsigned short 
00924       lowest() noexcept { return min(); }
00925 #endif
00926 
00927       static _GLIBCXX_USE_CONSTEXPR int digits 
00928        = __glibcxx_digits (unsigned short);
00929       static _GLIBCXX_USE_CONSTEXPR int digits10 
00930        = __glibcxx_digits10 (unsigned short);
00931 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00932       static constexpr int max_digits10 = 0;
00933 #endif
00934       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
00935       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
00936       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
00937       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
00938 
00939       static _GLIBCXX_CONSTEXPR unsigned short 
00940       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
00941 
00942       static _GLIBCXX_CONSTEXPR unsigned short 
00943       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
00944 
00945       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
00946       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
00947       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
00948       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
00949 
00950       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
00951       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
00952       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
00953       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
00954        = denorm_absent;
00955       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
00956 
00957       static _GLIBCXX_CONSTEXPR unsigned short 
00958       infinity() _GLIBCXX_USE_NOEXCEPT
00959       { return static_cast<unsigned short>(0); }
00960 
00961       static _GLIBCXX_CONSTEXPR unsigned short 
00962       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
00963       { return static_cast<unsigned short>(0); }
00964 
00965       static _GLIBCXX_CONSTEXPR unsigned short 
00966       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
00967       { return static_cast<unsigned short>(0); }
00968 
00969       static _GLIBCXX_CONSTEXPR unsigned short 
00970       denorm_min() _GLIBCXX_USE_NOEXCEPT
00971       { return static_cast<unsigned short>(0); }
00972 
00973       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
00974       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
00975       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
00976 
00977       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
00978       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
00979       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
00980        = round_toward_zero;
00981     };
00982 
00983   /// numeric_limits<int> specialization.
00984   template<>
00985     struct numeric_limits<int>
00986     {
00987       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
00988 
00989       static _GLIBCXX_CONSTEXPR int 
00990       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
00991 
00992       static _GLIBCXX_CONSTEXPR int 
00993       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
00994 
00995 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00996       static constexpr int 
00997       lowest() noexcept { return min(); }
00998 #endif
00999 
01000       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
01001       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
01002 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01003       static constexpr int max_digits10 = 0;
01004 #endif
01005       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01006       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01007       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01008       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01009 
01010       static _GLIBCXX_CONSTEXPR int 
01011       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01012 
01013       static _GLIBCXX_CONSTEXPR int 
01014       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01015 
01016       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01017       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01018       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01019       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01020 
01021       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01022       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01023       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01024       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01025        = denorm_absent;
01026       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01027 
01028       static _GLIBCXX_CONSTEXPR int 
01029       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01030 
01031       static _GLIBCXX_CONSTEXPR int 
01032       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01033 
01034       static _GLIBCXX_CONSTEXPR int 
01035       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01036 
01037       static _GLIBCXX_CONSTEXPR int 
01038       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
01039 
01040       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01041       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01042       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01043 
01044       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01045       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01046       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01047        = round_toward_zero;
01048     };
01049 
01050   /// numeric_limits<unsigned int> specialization.
01051   template<>
01052     struct numeric_limits<unsigned int>
01053     {
01054       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01055 
01056       static _GLIBCXX_CONSTEXPR unsigned int 
01057       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01058 
01059       static _GLIBCXX_CONSTEXPR unsigned int 
01060       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
01061 
01062 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01063       static constexpr unsigned int 
01064       lowest() noexcept { return min(); }
01065 #endif
01066 
01067       static _GLIBCXX_USE_CONSTEXPR int digits 
01068        = __glibcxx_digits (unsigned int);
01069       static _GLIBCXX_USE_CONSTEXPR int digits10 
01070        = __glibcxx_digits10 (unsigned int);
01071 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01072       static constexpr int max_digits10 = 0;
01073 #endif
01074       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01075       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01076       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01077       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01078 
01079       static _GLIBCXX_CONSTEXPR unsigned int 
01080       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01081 
01082       static _GLIBCXX_CONSTEXPR unsigned int 
01083       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01084 
01085       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01086       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01087       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01088       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01089 
01090       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01091       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01092       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01093       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01094        = denorm_absent;
01095       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01096 
01097       static _GLIBCXX_CONSTEXPR unsigned int 
01098       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
01099 
01100       static _GLIBCXX_CONSTEXPR unsigned int 
01101       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01102       { return static_cast<unsigned int>(0); }
01103 
01104       static _GLIBCXX_CONSTEXPR unsigned int 
01105       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01106       { return static_cast<unsigned int>(0); }
01107 
01108       static _GLIBCXX_CONSTEXPR unsigned int 
01109       denorm_min() _GLIBCXX_USE_NOEXCEPT
01110       { return static_cast<unsigned int>(0); }
01111 
01112       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01113       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01114       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01115 
01116       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01117       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01118       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01119        = round_toward_zero;
01120     };
01121 
01122   /// numeric_limits<long> specialization.
01123   template<>
01124     struct numeric_limits<long>
01125     {
01126       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01127 
01128       static _GLIBCXX_CONSTEXPR long
01129       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
01130 
01131       static _GLIBCXX_CONSTEXPR long 
01132       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
01133 
01134 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01135       static constexpr long 
01136       lowest() noexcept { return min(); }
01137 #endif
01138 
01139       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
01140       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
01141 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01142       static constexpr int max_digits10 = 0;
01143 #endif
01144       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01145       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01146       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01147       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01148 
01149       static _GLIBCXX_CONSTEXPR long 
01150       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01151 
01152       static _GLIBCXX_CONSTEXPR long 
01153       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01154 
01155       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01156       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01157       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01158       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01159 
01160       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01161       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01162       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01163       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01164        = denorm_absent;
01165       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01166 
01167       static _GLIBCXX_CONSTEXPR long 
01168       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01169 
01170       static _GLIBCXX_CONSTEXPR long 
01171       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01172 
01173       static _GLIBCXX_CONSTEXPR long 
01174       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01175 
01176       static _GLIBCXX_CONSTEXPR long 
01177       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
01178 
01179       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01180       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01181       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01182 
01183       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01184       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01185       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01186        = round_toward_zero;
01187     };
01188 
01189   /// numeric_limits<unsigned long> specialization.
01190   template<>
01191     struct numeric_limits<unsigned long>
01192     {
01193       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01194 
01195       static _GLIBCXX_CONSTEXPR unsigned long 
01196       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01197 
01198       static _GLIBCXX_CONSTEXPR unsigned long 
01199       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
01200 
01201 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01202       static constexpr unsigned long 
01203       lowest() noexcept { return min(); }
01204 #endif
01205 
01206       static _GLIBCXX_USE_CONSTEXPR int digits 
01207        = __glibcxx_digits (unsigned long);
01208       static _GLIBCXX_USE_CONSTEXPR int digits10 
01209        = __glibcxx_digits10 (unsigned long);
01210 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01211       static constexpr int max_digits10 = 0;
01212 #endif
01213       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01214       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01215       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01216       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01217 
01218       static _GLIBCXX_CONSTEXPR unsigned long 
01219       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01220 
01221       static _GLIBCXX_CONSTEXPR unsigned long 
01222       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01223 
01224       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01225       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01226       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01227       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01228 
01229       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01230       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01231       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01232       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01233        = denorm_absent;
01234       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01235 
01236       static _GLIBCXX_CONSTEXPR unsigned long 
01237       infinity() _GLIBCXX_USE_NOEXCEPT
01238       { return static_cast<unsigned long>(0); }
01239 
01240       static _GLIBCXX_CONSTEXPR unsigned long 
01241       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01242       { return static_cast<unsigned long>(0); }
01243 
01244       static _GLIBCXX_CONSTEXPR unsigned long 
01245       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01246       { return static_cast<unsigned long>(0); }
01247 
01248       static _GLIBCXX_CONSTEXPR unsigned long 
01249       denorm_min() _GLIBCXX_USE_NOEXCEPT
01250       { return static_cast<unsigned long>(0); }
01251 
01252       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01253       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01254       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01255 
01256       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01257       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01258       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01259        = round_toward_zero;
01260     };
01261 
01262   /// numeric_limits<long long> specialization.
01263   template<>
01264     struct numeric_limits<long long>
01265     {
01266       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01267 
01268       static _GLIBCXX_CONSTEXPR long long 
01269       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
01270 
01271       static _GLIBCXX_CONSTEXPR long long 
01272       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
01273 
01274 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01275       static constexpr long long 
01276       lowest() noexcept { return min(); }
01277 #endif
01278 
01279       static _GLIBCXX_USE_CONSTEXPR int digits 
01280        = __glibcxx_digits (long long);
01281       static _GLIBCXX_USE_CONSTEXPR int digits10 
01282        = __glibcxx_digits10 (long long);
01283 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01284       static constexpr int max_digits10 = 0;
01285 #endif
01286       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01287       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01288       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01289       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01290 
01291       static _GLIBCXX_CONSTEXPR long long 
01292       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01293 
01294       static _GLIBCXX_CONSTEXPR long long 
01295       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01296 
01297       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01298       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01299       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01300       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01301 
01302       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01303       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01304       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01305       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01306        = denorm_absent;
01307       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01308 
01309       static _GLIBCXX_CONSTEXPR long long 
01310       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01311 
01312       static _GLIBCXX_CONSTEXPR long long 
01313       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01314 
01315       static _GLIBCXX_CONSTEXPR long long 
01316       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01317       { return static_cast<long long>(0); }
01318 
01319       static _GLIBCXX_CONSTEXPR long long 
01320       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
01321 
01322       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01323       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01324       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01325 
01326       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01327       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01328       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01329        = round_toward_zero;
01330     };
01331 
01332   /// numeric_limits<unsigned long long> specialization.
01333   template<>
01334     struct numeric_limits<unsigned long long>
01335     {
01336       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01337 
01338       static _GLIBCXX_CONSTEXPR unsigned long long 
01339       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01340 
01341       static _GLIBCXX_CONSTEXPR unsigned long long 
01342       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
01343 
01344 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01345       static constexpr unsigned long long 
01346       lowest() noexcept { return min(); }
01347 #endif
01348 
01349       static _GLIBCXX_USE_CONSTEXPR int digits 
01350        = __glibcxx_digits (unsigned long long);
01351       static _GLIBCXX_USE_CONSTEXPR int digits10 
01352        = __glibcxx_digits10 (unsigned long long);
01353 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01354       static constexpr int max_digits10 = 0;
01355 #endif
01356       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01357       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01358       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01359       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01360 
01361       static _GLIBCXX_CONSTEXPR unsigned long long 
01362       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01363 
01364       static _GLIBCXX_CONSTEXPR unsigned long long 
01365       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01366 
01367       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01368       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01369       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01370       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01371 
01372       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01373       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01374       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01375       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
01376        = denorm_absent;
01377       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01378 
01379       static _GLIBCXX_CONSTEXPR unsigned long long 
01380       infinity() _GLIBCXX_USE_NOEXCEPT
01381       { return static_cast<unsigned long long>(0); }
01382 
01383       static _GLIBCXX_CONSTEXPR unsigned long long 
01384       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01385       { return static_cast<unsigned long long>(0); }
01386 
01387       static _GLIBCXX_CONSTEXPR unsigned long long 
01388       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01389       { return static_cast<unsigned long long>(0); }
01390 
01391       static _GLIBCXX_CONSTEXPR unsigned long long 
01392       denorm_min() _GLIBCXX_USE_NOEXCEPT
01393       { return static_cast<unsigned long long>(0); }
01394 
01395       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01396       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01397       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01398 
01399       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01400       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01401       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01402        = round_toward_zero;
01403     };
01404 
01405 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
01406   /// numeric_limits<__int128> specialization.
01407   template<>
01408     struct numeric_limits<__int128>
01409     {
01410       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01411 
01412       static _GLIBCXX_CONSTEXPR __int128
01413       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
01414 
01415       static _GLIBCXX_CONSTEXPR __int128
01416       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
01417 
01418 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01419       static constexpr __int128
01420       lowest() noexcept { return min(); }
01421 #endif
01422 
01423       static _GLIBCXX_USE_CONSTEXPR int digits
01424        = __glibcxx_digits (__int128);
01425       static _GLIBCXX_USE_CONSTEXPR int digits10
01426        = __glibcxx_digits10 (__int128);
01427 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01428       static constexpr int max_digits10 = 0;
01429 #endif
01430       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01431       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01432       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01433       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01434 
01435       static _GLIBCXX_CONSTEXPR __int128
01436       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01437 
01438       static _GLIBCXX_CONSTEXPR __int128
01439       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01440 
01441       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01442       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01443       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01444       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01445 
01446       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01447       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01448       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01449       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01450        = denorm_absent;
01451       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01452 
01453       static _GLIBCXX_CONSTEXPR __int128
01454       infinity() _GLIBCXX_USE_NOEXCEPT
01455       { return static_cast<__int128>(0); }
01456 
01457       static _GLIBCXX_CONSTEXPR __int128
01458       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01459       { return static_cast<__int128>(0); }
01460       
01461       static _GLIBCXX_CONSTEXPR __int128
01462       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01463       { return static_cast<__int128>(0); }
01464       
01465       static _GLIBCXX_CONSTEXPR __int128
01466       denorm_min() _GLIBCXX_USE_NOEXCEPT
01467       { return static_cast<__int128>(0); }
01468 
01469       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01470       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01471       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01472 
01473       static _GLIBCXX_USE_CONSTEXPR bool traps
01474        = __glibcxx_integral_traps;
01475       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01476       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
01477        = round_toward_zero;
01478     };
01479 
01480   /// numeric_limits<unsigned __int128> specialization.
01481   template<>
01482     struct numeric_limits<unsigned __int128>
01483     {
01484       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01485 
01486       static _GLIBCXX_CONSTEXPR unsigned __int128
01487       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
01488 
01489       static _GLIBCXX_CONSTEXPR unsigned __int128
01490       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
01491 
01492 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01493       static constexpr unsigned __int128
01494       lowest() noexcept { return min(); }
01495 #endif
01496 
01497       static _GLIBCXX_USE_CONSTEXPR int digits
01498        = __glibcxx_digits (unsigned __int128);
01499       static _GLIBCXX_USE_CONSTEXPR int digits10
01500        = __glibcxx_digits10 (unsigned __int128);
01501 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01502       static constexpr int max_digits10 = 0;
01503 #endif
01504       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
01505       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
01506       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
01507       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
01508 
01509       static _GLIBCXX_CONSTEXPR unsigned __int128
01510       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
01511 
01512       static _GLIBCXX_CONSTEXPR unsigned __int128
01513       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
01514 
01515       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
01516       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
01517       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
01518       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
01519 
01520       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
01521       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
01522       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
01523       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01524        = denorm_absent;
01525       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
01526 
01527       static _GLIBCXX_CONSTEXPR unsigned __int128
01528       infinity() _GLIBCXX_USE_NOEXCEPT
01529       { return static_cast<unsigned __int128>(0); }
01530 
01531       static _GLIBCXX_CONSTEXPR unsigned __int128
01532       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
01533       { return static_cast<unsigned __int128>(0); }
01534 
01535       static _GLIBCXX_CONSTEXPR unsigned __int128
01536       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
01537       { return static_cast<unsigned __int128>(0); }
01538 
01539       static _GLIBCXX_CONSTEXPR unsigned __int128
01540       denorm_min() _GLIBCXX_USE_NOEXCEPT
01541       { return static_cast<unsigned __int128>(0); }
01542 
01543       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
01544       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01545       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
01546 
01547       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
01548       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
01549       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
01550        = round_toward_zero;
01551     };
01552 #endif
01553 
01554   /// numeric_limits<float> specialization.
01555   template<>
01556     struct numeric_limits<float>
01557     {
01558       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01559 
01560       static _GLIBCXX_CONSTEXPR float 
01561       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
01562 
01563       static _GLIBCXX_CONSTEXPR float 
01564       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
01565 
01566 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01567       static constexpr float 
01568       lowest() noexcept { return -__FLT_MAX__; }
01569 #endif
01570 
01571       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
01572       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
01573 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01574       static constexpr int max_digits10
01575      = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
01576 #endif
01577       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01578       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01579       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01580       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01581 
01582       static _GLIBCXX_CONSTEXPR float 
01583       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
01584 
01585       static _GLIBCXX_CONSTEXPR float 
01586       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
01587 
01588       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
01589       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
01590       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
01591       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
01592 
01593       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
01594       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
01595       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01596       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01597     = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
01598       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
01599        = __glibcxx_float_has_denorm_loss;
01600 
01601       static _GLIBCXX_CONSTEXPR float 
01602       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
01603 
01604       static _GLIBCXX_CONSTEXPR float 
01605       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
01606 
01607       static _GLIBCXX_CONSTEXPR float 
01608       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
01609 
01610       static _GLIBCXX_CONSTEXPR float 
01611       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
01612 
01613       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01614     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01615       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01616       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01617 
01618       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
01619       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
01620        = __glibcxx_float_tinyness_before;
01621       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01622        = round_to_nearest;
01623     };
01624 
01625 #undef __glibcxx_float_has_denorm_loss
01626 #undef __glibcxx_float_traps
01627 #undef __glibcxx_float_tinyness_before
01628 
01629   /// numeric_limits<double> specialization.
01630   template<>
01631     struct numeric_limits<double>
01632     {
01633       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01634 
01635       static _GLIBCXX_CONSTEXPR double 
01636       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
01637 
01638       static _GLIBCXX_CONSTEXPR double 
01639       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
01640 
01641 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01642       static constexpr double 
01643       lowest() noexcept { return -__DBL_MAX__; }
01644 #endif
01645 
01646       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
01647       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
01648 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01649       static constexpr int max_digits10
01650      = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
01651 #endif
01652       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01653       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01654       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01655       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01656 
01657       static _GLIBCXX_CONSTEXPR double 
01658       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
01659 
01660       static _GLIBCXX_CONSTEXPR double 
01661       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
01662 
01663       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
01664       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
01665       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
01666       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
01667 
01668       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
01669       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
01670       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01671       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01672     = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
01673       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
01674         = __glibcxx_double_has_denorm_loss;
01675 
01676       static _GLIBCXX_CONSTEXPR double 
01677       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
01678 
01679       static _GLIBCXX_CONSTEXPR double 
01680       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
01681 
01682       static _GLIBCXX_CONSTEXPR double 
01683       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
01684 
01685       static _GLIBCXX_CONSTEXPR double 
01686       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
01687 
01688       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01689     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01690       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01691       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01692 
01693       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
01694       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
01695        = __glibcxx_double_tinyness_before;
01696       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
01697        = round_to_nearest;
01698     };
01699 
01700 #undef __glibcxx_double_has_denorm_loss
01701 #undef __glibcxx_double_traps
01702 #undef __glibcxx_double_tinyness_before
01703 
01704   /// numeric_limits<long double> specialization.
01705   template<>
01706     struct numeric_limits<long double>
01707     {
01708       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
01709 
01710       static _GLIBCXX_CONSTEXPR long double 
01711       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
01712 
01713       static _GLIBCXX_CONSTEXPR long double 
01714       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
01715 
01716 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01717       static constexpr long double 
01718       lowest() noexcept { return -__LDBL_MAX__; }
01719 #endif
01720 
01721       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
01722       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
01723 #ifdef __GXX_EXPERIMENTAL_CXX0X__
01724       static _GLIBCXX_USE_CONSTEXPR int max_digits10
01725      = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
01726 #endif
01727       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
01728       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
01729       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
01730       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
01731 
01732       static _GLIBCXX_CONSTEXPR long double 
01733       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
01734 
01735       static _GLIBCXX_CONSTEXPR long double 
01736       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
01737 
01738       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
01739       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
01740       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
01741       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
01742 
01743       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
01744       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
01745       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
01746       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
01747     = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
01748       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
01749     = __glibcxx_long_double_has_denorm_loss;
01750 
01751       static _GLIBCXX_CONSTEXPR long double 
01752       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
01753 
01754       static _GLIBCXX_CONSTEXPR long double 
01755       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
01756 
01757       static _GLIBCXX_CONSTEXPR long double 
01758       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
01759 
01760       static _GLIBCXX_CONSTEXPR long double 
01761       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
01762 
01763       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
01764     = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
01765       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
01766       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
01767 
01768       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
01769       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 
01770                      __glibcxx_long_double_tinyness_before;
01771       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
01772                               round_to_nearest;
01773     };
01774 
01775 #undef __glibcxx_long_double_has_denorm_loss
01776 #undef __glibcxx_long_double_traps
01777 #undef __glibcxx_long_double_tinyness_before
01778 
01779 _GLIBCXX_END_NAMESPACE_VERSION
01780 } // namespace
01781 
01782 #undef __glibcxx_signed
01783 #undef __glibcxx_min
01784 #undef __glibcxx_max
01785 #undef __glibcxx_digits
01786 #undef __glibcxx_digits10
01787 #undef __glibcxx_max_digits10
01788 
01789 #endif // _GLIBCXX_NUMERIC_LIMITS