Reverting merge from trunk
[official-gcc.git] / libstdc++-v3 / include / std / limits
bloba137d0b121091dd8eac63ac18cef1cddb06de46d
1 // The template and inlines for the numeric_limits classes. -*- C++ -*-
3 // Copyright (C) 1999-2013 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23 // <http://www.gnu.org/licenses/>.
25 /** @file include/limits
26  *  This is a Standard C++ Library header.
27  */
29 // Note: this is not a conforming implementation.
30 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
33 // ISO 14882:1998
34 // 18.2.1
37 #ifndef _GLIBCXX_NUMERIC_LIMITS
38 #define _GLIBCXX_NUMERIC_LIMITS 1
40 #pragma GCC system_header
42 #include <bits/c++config.h>
45 // The numeric_limits<> traits document implementation-defined aspects
46 // of fundamental arithmetic data types (integers and floating points).
47 // From Standard C++ point of view, there are 14 such types:
48 //   * integers
49 //         bool                                                 (1)
50 //         char, signed char, unsigned char, wchar_t            (4)
51 //         short, unsigned short                                (2)
52 //         int, unsigned                                        (2)
53 //         long, unsigned long                                  (2)
55 //   * floating points
56 //         float                                                (1)
57 //         double                                               (1)
58 //         long double                                          (1)
60 // GNU C++ understands (where supported by the host C-library)
61 //   * integer
62 //         long long, unsigned long long                        (2)
64 // which brings us to 16 fundamental arithmetic data types in GNU C++.
67 // Since a numeric_limits<> is a bit tricky to get right, we rely on
68 // an interface composed of macros which should be defined in config/os
69 // or config/cpu when they differ from the generic (read arbitrary)
70 // definitions given here.
73 // These values can be overridden in the target configuration file.
74 // The default values are appropriate for many 32-bit targets.
76 // GCC only intrinsically supports modulo integral types.  The only remaining
77 // integral exceptional values is division by zero.  Only targets that do not
78 // signal division by zero in some "hard to ignore" way should use false.
79 #ifndef __glibcxx_integral_traps
80 # define __glibcxx_integral_traps true
81 #endif
83 // float
86 // Default values.  Should be overridden in configuration files if necessary.
88 #ifndef __glibcxx_float_has_denorm_loss
89 #  define __glibcxx_float_has_denorm_loss false
90 #endif
91 #ifndef __glibcxx_float_traps
92 #  define __glibcxx_float_traps false
93 #endif
94 #ifndef __glibcxx_float_tinyness_before
95 #  define __glibcxx_float_tinyness_before false
96 #endif
98 // double
100 // Default values.  Should be overridden in configuration files if necessary.
102 #ifndef __glibcxx_double_has_denorm_loss
103 #  define __glibcxx_double_has_denorm_loss false
104 #endif
105 #ifndef __glibcxx_double_traps
106 #  define __glibcxx_double_traps false
107 #endif
108 #ifndef __glibcxx_double_tinyness_before
109 #  define __glibcxx_double_tinyness_before false
110 #endif
112 // long double
114 // Default values.  Should be overridden in configuration files if necessary.
116 #ifndef __glibcxx_long_double_has_denorm_loss
117 #  define __glibcxx_long_double_has_denorm_loss false
118 #endif
119 #ifndef __glibcxx_long_double_traps
120 #  define __glibcxx_long_double_traps false
121 #endif
122 #ifndef __glibcxx_long_double_tinyness_before
123 #  define __glibcxx_long_double_tinyness_before false
124 #endif
126 // You should not need to define any macros below this point.
128 #define __glibcxx_signed(T)     ((T)(-1) < 0)
130 #define __glibcxx_min(T) \
131   (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
133 #define __glibcxx_max(T) \
134   (__glibcxx_signed (T) ? \
135    (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
137 #define __glibcxx_digits(T) \
138   (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
140 // The fraction 643/2136 approximates log10(2) to 7 significant digits.
141 #define __glibcxx_digits10(T) \
142   (__glibcxx_digits (T) * 643L / 2136)
144 #define __glibcxx_max_digits10(T) \
145   (2 + (T) * 643L / 2136)
147 namespace std _GLIBCXX_VISIBILITY(default)
149 _GLIBCXX_BEGIN_NAMESPACE_VERSION
151   /**
152    *  @brief Describes the rounding style for floating-point types.
153    *
154    *  This is used in the std::numeric_limits class.
155   */
156   enum float_round_style
157   {
158     round_indeterminate       = -1,    /// Intermediate.
159     round_toward_zero         = 0,     /// To zero.
160     round_to_nearest          = 1,     /// To the nearest representable value.
161     round_toward_infinity     = 2,     /// To infinity.
162     round_toward_neg_infinity = 3      /// To negative infinity.
163   };
165   /**
166    *  @brief Describes the denormalization for floating-point types.
167    *
168    *  These values represent the presence or absence of a variable number
169    *  of exponent bits.  This type is used in the std::numeric_limits class.
170   */
171   enum float_denorm_style
172   {
173     /// Indeterminate at compile time whether denormalized values are allowed.
174     denorm_indeterminate = -1,
175     /// The type does not allow denormalized values.
176     denorm_absent        = 0,
177     /// The type allows denormalized values.
178     denorm_present       = 1
179   };
181   /**
182    *  @brief Part of std::numeric_limits.
183    *
184    *  The @c static @c const members are usable as integral constant
185    *  expressions.
186    *
187    *  @note This is a separate class for purposes of efficiency; you
188    *        should only access these members as part of an instantiation
189    *        of the std::numeric_limits class.
190   */
191   struct __numeric_limits_base
192   {
193     /** This will be true for all fundamental types (which have
194         specializations), and false for everything else.  */
195     static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
197     /** The number of @c radix digits that be represented without change:  for
198         integer types, the number of non-sign bits in the mantissa; for
199         floating types, the number of @c radix digits in the mantissa.  */
200     static _GLIBCXX_USE_CONSTEXPR int digits = 0;
202     /** The number of base 10 digits that can be represented without change. */
203     static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
205 #if __cplusplus >= 201103L
206     /** The number of base 10 digits required to ensure that values which
207         differ are always differentiated.  */
208     static constexpr int max_digits10 = 0;
209 #endif
211     /** True if the type is signed.  */
212     static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
214     /** True if the type is integer.  */
215     static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
217     /** True if the type uses an exact representation. All integer types are
218         exact, but not all exact types are integer.  For example, rational and
219         fixed-exponent representations are exact but not integer. */
220     static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
222     /** For integer types, specifies the base of the representation.  For
223         floating types, specifies the base of the exponent representation.  */
224     static _GLIBCXX_USE_CONSTEXPR int radix = 0;
226     /** The minimum negative integer such that @c radix raised to the power of
227         (one less than that integer) is a normalized floating point number.  */
228     static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
230     /** The minimum negative integer such that 10 raised to that power is in
231         the range of normalized floating point numbers.  */
232     static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
234     /** The maximum positive integer such that @c radix raised to the power of
235         (one less than that integer) is a representable finite floating point
236         number.  */
237     static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
239     /** The maximum positive integer such that 10 raised to that power is in
240         the range of representable finite floating point numbers.  */
241     static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
243     /** True if the type has a representation for positive infinity.  */
244     static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
246     /** True if the type has a representation for a quiet (non-signaling)
247         Not a Number.  */
248     static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
250     /** True if the type has a representation for a signaling
251         Not a Number.  */
252     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
254     /** See std::float_denorm_style for more information.  */
255     static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
257     /** True if loss of accuracy is detected as a denormalization loss,
258         rather than as an inexact result. */
259     static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
261     /** True if-and-only-if the type adheres to the IEC 559 standard, also
262         known as IEEE 754.  (Only makes sense for floating point types.)  */
263     static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
265     /** True if the set of values representable by the type is
266         finite.  All built-in types are bounded, this member would be
267         false for arbitrary precision types. */
268     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
270     /** True if the type is @e modulo. A type is modulo if, for any
271         operation involving +, -, or * on values of that type whose
272         result would fall outside the range [min(),max()], the value
273         returned differs from the true value by an integer multiple of
274         max() - min() + 1. On most machines, this is false for floating
275         types, true for unsigned integers, and true for signed integers.
276         See PR22200 about signed integers.  */
277     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
279     /** True if trapping is implemented for this type.  */
280     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
282     /** True if tininess is detected before rounding.  (see IEC 559)  */
283     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
285     /** See std::float_round_style for more information.  This is only
286         meaningful for floating types; integer types will all be
287         round_toward_zero.  */
288     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
289                                                     round_toward_zero;
290   };
292   /**
293    *  @brief Properties of fundamental types.
294    *
295    *  This class allows a program to obtain information about the
296    *  representation of a fundamental type on a given platform.  For
297    *  non-fundamental types, the functions will return 0 and the data
298    *  members will all be @c false.
299    *
300    *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
301    *  noted, but not incorporated in this documented (yet).
302   */
303   template<typename _Tp>
304     struct numeric_limits : public __numeric_limits_base
305     {
306       /** The minimum finite value, or for floating types with
307           denormalization, the minimum positive normalized value.  */
308       static _GLIBCXX_CONSTEXPR _Tp
309       min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
311       /** The maximum finite value.  */
312       static _GLIBCXX_CONSTEXPR _Tp
313       max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
315 #if __cplusplus >= 201103L
316       /** A finite value x such that there is no other finite value y
317        *  where y < x.  */
318       static constexpr _Tp
319       lowest() noexcept { return _Tp(); }
320 #endif
322       /** The @e machine @e epsilon:  the difference between 1 and the least
323           value greater than 1 that is representable.  */
324       static _GLIBCXX_CONSTEXPR _Tp
325       epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
327       /** The maximum rounding error measurement (see LIA-1).  */
328       static _GLIBCXX_CONSTEXPR _Tp
329       round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
331       /** The representation of positive infinity, if @c has_infinity.  */
332       static _GLIBCXX_CONSTEXPR _Tp
333       infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
335       /** The representation of a quiet Not a Number,
336           if @c has_quiet_NaN. */
337       static _GLIBCXX_CONSTEXPR _Tp
338       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
340       /** The representation of a signaling Not a Number, if
341           @c has_signaling_NaN. */
342       static _GLIBCXX_CONSTEXPR _Tp
343       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
345       /** The minimum positive denormalized value.  For types where
346           @c has_denorm is false, this is the minimum positive normalized
347           value.  */
348       static _GLIBCXX_CONSTEXPR _Tp
349       denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
350     };
352 #if __cplusplus >= 201103L
353   template<typename _Tp>
354     struct numeric_limits<const _Tp>
355     : public numeric_limits<_Tp> { };
357   template<typename _Tp>
358     struct numeric_limits<volatile _Tp>
359     : public numeric_limits<_Tp> { };
361   template<typename _Tp>
362     struct numeric_limits<const volatile _Tp>
363     : public numeric_limits<_Tp> { };
364 #endif
366   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
367   // you get the count right. (18 in c++0x mode)
369   /// numeric_limits<bool> specialization.
370   template<>
371     struct numeric_limits<bool>
372     {
373       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
375       static _GLIBCXX_CONSTEXPR bool 
376       min() _GLIBCXX_USE_NOEXCEPT { return false; }
378       static _GLIBCXX_CONSTEXPR bool 
379       max() _GLIBCXX_USE_NOEXCEPT { return true; }
381 #if __cplusplus >= 201103L
382       static constexpr bool
383       lowest() noexcept { return min(); }
384 #endif
385       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
386       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
387 #if __cplusplus >= 201103L
388       static constexpr int max_digits10 = 0;
389 #endif
390       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
391       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
392       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
393       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
395       static _GLIBCXX_CONSTEXPR bool 
396       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
398       static _GLIBCXX_CONSTEXPR bool 
399       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
401       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
402       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
403       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
404       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
406       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
407       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
408       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
409       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
410        = denorm_absent;
411       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
413       static _GLIBCXX_CONSTEXPR bool 
414       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
416       static _GLIBCXX_CONSTEXPR bool 
417       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
419       static _GLIBCXX_CONSTEXPR bool 
420       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
422       static _GLIBCXX_CONSTEXPR bool 
423       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
425       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
426       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
427       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
429       // It is not clear what it means for a boolean type to trap.
430       // This is a DR on the LWG issue list.  Here, I use integer
431       // promotion semantics.
432       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
433       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
434       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
435        = round_toward_zero;
436     };
438   /// numeric_limits<char> specialization.
439   template<>
440     struct numeric_limits<char>
441     {
442       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
444       static _GLIBCXX_CONSTEXPR char 
445       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
447       static _GLIBCXX_CONSTEXPR char 
448       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
450 #if __cplusplus >= 201103L
451       static constexpr char 
452       lowest() noexcept { return min(); }
453 #endif
455       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
456       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
457 #if __cplusplus >= 201103L
458       static constexpr int max_digits10 = 0;
459 #endif
460       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
461       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
462       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
463       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
465       static _GLIBCXX_CONSTEXPR char 
466       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
468       static _GLIBCXX_CONSTEXPR char 
469       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
471       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
472       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
473       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
474       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
476       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
477       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
478       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
479       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
480        = denorm_absent;
481       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
483       static _GLIBCXX_CONSTEXPR 
484       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
486       static _GLIBCXX_CONSTEXPR char 
487       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
489       static _GLIBCXX_CONSTEXPR char 
490       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
492       static _GLIBCXX_CONSTEXPR char 
493       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
495       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
496       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
497       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
499       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
500       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
501       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
502        = round_toward_zero;
503     };
505   /// numeric_limits<signed char> specialization.
506   template<>
507     struct numeric_limits<signed char>
508     {
509       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
511       static _GLIBCXX_CONSTEXPR signed char 
512       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
514       static _GLIBCXX_CONSTEXPR signed char 
515       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
517 #if __cplusplus >= 201103L
518       static constexpr signed char 
519       lowest() noexcept { return min(); }
520 #endif
522       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
523       static _GLIBCXX_USE_CONSTEXPR int digits10 
524        = __glibcxx_digits10 (signed char);
525 #if __cplusplus >= 201103L
526       static constexpr int max_digits10 = 0;
527 #endif
528       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
529       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
530       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
531       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
533       static _GLIBCXX_CONSTEXPR signed char 
534       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
536       static _GLIBCXX_CONSTEXPR signed char 
537       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
539       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
540       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
541       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
542       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
544       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
545       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
546       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
547       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
548        = denorm_absent;
549       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
551       static _GLIBCXX_CONSTEXPR signed char 
552       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
554       static _GLIBCXX_CONSTEXPR signed char 
555       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
557       static _GLIBCXX_CONSTEXPR signed char 
558       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
559       { return static_cast<signed char>(0); }
561       static _GLIBCXX_CONSTEXPR signed char 
562       denorm_min() _GLIBCXX_USE_NOEXCEPT
563       { return static_cast<signed char>(0); }
565       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
566       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
567       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
569       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
570       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
571       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
572        = round_toward_zero;
573     };
575   /// numeric_limits<unsigned char> specialization.
576   template<>
577     struct numeric_limits<unsigned char>
578     {
579       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
581       static _GLIBCXX_CONSTEXPR unsigned char 
582       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
584       static _GLIBCXX_CONSTEXPR unsigned char 
585       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
587 #if __cplusplus >= 201103L
588       static constexpr unsigned char 
589       lowest() noexcept { return min(); }
590 #endif
592       static _GLIBCXX_USE_CONSTEXPR int digits 
593        = __glibcxx_digits (unsigned char);
594       static _GLIBCXX_USE_CONSTEXPR int digits10 
595        = __glibcxx_digits10 (unsigned char);
596 #if __cplusplus >= 201103L
597       static constexpr int max_digits10 = 0;
598 #endif
599       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
600       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
601       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
602       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
604       static _GLIBCXX_CONSTEXPR unsigned char 
605       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
607       static _GLIBCXX_CONSTEXPR unsigned char 
608       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
610       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
611       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
612       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
613       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
615       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
616       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
617       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
618       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
619        = denorm_absent;
620       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
622       static _GLIBCXX_CONSTEXPR unsigned char 
623       infinity() _GLIBCXX_USE_NOEXCEPT
624       { return static_cast<unsigned char>(0); }
626       static _GLIBCXX_CONSTEXPR unsigned char 
627       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
628       { return static_cast<unsigned char>(0); }
630       static _GLIBCXX_CONSTEXPR unsigned char 
631       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
632       { return static_cast<unsigned char>(0); }
634       static _GLIBCXX_CONSTEXPR unsigned char 
635       denorm_min() _GLIBCXX_USE_NOEXCEPT
636       { return static_cast<unsigned char>(0); }
638       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
639       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
640       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
642       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
643       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
644       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
645        = round_toward_zero;
646     };
648   /// numeric_limits<wchar_t> specialization.
649   template<>
650     struct numeric_limits<wchar_t>
651     {
652       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
654       static _GLIBCXX_CONSTEXPR wchar_t 
655       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
657       static _GLIBCXX_CONSTEXPR wchar_t 
658       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
660 #if __cplusplus >= 201103L
661       static constexpr wchar_t
662       lowest() noexcept { return min(); }
663 #endif
665       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
666       static _GLIBCXX_USE_CONSTEXPR int digits10 
667        = __glibcxx_digits10 (wchar_t);
668 #if __cplusplus >= 201103L
669       static constexpr int max_digits10 = 0;
670 #endif
671       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
672       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
673       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
674       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
676       static _GLIBCXX_CONSTEXPR wchar_t 
677       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
679       static _GLIBCXX_CONSTEXPR wchar_t 
680       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
682       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
683       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
684       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
685       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
687       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
688       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
689       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
690       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
691        = denorm_absent;
692       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
694       static _GLIBCXX_CONSTEXPR wchar_t 
695       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
697       static _GLIBCXX_CONSTEXPR wchar_t 
698       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
700       static _GLIBCXX_CONSTEXPR wchar_t 
701       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
703       static _GLIBCXX_CONSTEXPR wchar_t 
704       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
706       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
707       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
708       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
710       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
711       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
712       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
713        = round_toward_zero;
714     };
716 #if __cplusplus >= 201103L
717   /// numeric_limits<char16_t> specialization.
718   template<>
719     struct numeric_limits<char16_t>
720     {
721       static constexpr bool is_specialized = true;
723       static constexpr char16_t 
724       min() noexcept { return __glibcxx_min (char16_t); }
726       static constexpr char16_t 
727       max() noexcept { return __glibcxx_max (char16_t); }
729       static constexpr char16_t 
730       lowest() noexcept { return min(); }
732       static constexpr int digits = __glibcxx_digits (char16_t);
733       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
734       static constexpr int max_digits10 = 0;
735       static constexpr bool is_signed = __glibcxx_signed (char16_t);
736       static constexpr bool is_integer = true;
737       static constexpr bool is_exact = true;
738       static constexpr int radix = 2;
740       static constexpr char16_t 
741       epsilon() noexcept { return 0; }
743       static constexpr char16_t 
744       round_error() noexcept { return 0; }
746       static constexpr int min_exponent = 0;
747       static constexpr int min_exponent10 = 0;
748       static constexpr int max_exponent = 0;
749       static constexpr int max_exponent10 = 0;
751       static constexpr bool has_infinity = false;
752       static constexpr bool has_quiet_NaN = false;
753       static constexpr bool has_signaling_NaN = false;
754       static constexpr float_denorm_style has_denorm = denorm_absent;
755       static constexpr bool has_denorm_loss = false;
757       static constexpr char16_t 
758       infinity() noexcept { return char16_t(); }
760       static constexpr char16_t 
761       quiet_NaN() noexcept { return char16_t(); }
763       static constexpr char16_t 
764       signaling_NaN() noexcept { return char16_t(); }
766       static constexpr char16_t 
767       denorm_min() noexcept { return char16_t(); }
769       static constexpr bool is_iec559 = false;
770       static constexpr bool is_bounded = true;
771       static constexpr bool is_modulo = !is_signed;
773       static constexpr bool traps = __glibcxx_integral_traps;
774       static constexpr bool tinyness_before = false;
775       static constexpr float_round_style round_style = round_toward_zero;
776     };
778   /// numeric_limits<char32_t> specialization.
779   template<>
780     struct numeric_limits<char32_t>
781     {
782       static constexpr bool is_specialized = true;
784       static constexpr char32_t 
785       min() noexcept { return __glibcxx_min (char32_t); }
787       static constexpr char32_t 
788       max() noexcept { return __glibcxx_max (char32_t); }
790       static constexpr char32_t 
791       lowest() noexcept { return min(); }
793       static constexpr int digits = __glibcxx_digits (char32_t);
794       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
795       static constexpr int max_digits10 = 0;
796       static constexpr bool is_signed = __glibcxx_signed (char32_t);
797       static constexpr bool is_integer = true;
798       static constexpr bool is_exact = true;
799       static constexpr int radix = 2;
801       static constexpr char32_t 
802       epsilon() noexcept { return 0; }
804       static constexpr char32_t 
805       round_error() noexcept { return 0; }
807       static constexpr int min_exponent = 0;
808       static constexpr int min_exponent10 = 0;
809       static constexpr int max_exponent = 0;
810       static constexpr int max_exponent10 = 0;
812       static constexpr bool has_infinity = false;
813       static constexpr bool has_quiet_NaN = false;
814       static constexpr bool has_signaling_NaN = false;
815       static constexpr float_denorm_style has_denorm = denorm_absent;
816       static constexpr bool has_denorm_loss = false;
818       static constexpr char32_t 
819       infinity() noexcept { return char32_t(); }
821       static constexpr char32_t 
822       quiet_NaN() noexcept { return char32_t(); }
824       static constexpr char32_t 
825       signaling_NaN() noexcept { return char32_t(); }
827       static constexpr char32_t 
828       denorm_min() noexcept { return char32_t(); }
830       static constexpr bool is_iec559 = false;
831       static constexpr bool is_bounded = true;
832       static constexpr bool is_modulo = !is_signed;
834       static constexpr bool traps = __glibcxx_integral_traps;
835       static constexpr bool tinyness_before = false;
836       static constexpr float_round_style round_style = round_toward_zero;
837     };
838 #endif
840   /// numeric_limits<short> specialization.
841   template<>
842     struct numeric_limits<short>
843     {
844       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
846       static _GLIBCXX_CONSTEXPR short 
847       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
849       static _GLIBCXX_CONSTEXPR short 
850       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
852 #if __cplusplus >= 201103L
853       static constexpr short 
854       lowest() noexcept { return min(); }
855 #endif
857       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
858       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
859 #if __cplusplus >= 201103L
860       static constexpr int max_digits10 = 0;
861 #endif
862       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
863       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
864       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
865       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
867       static _GLIBCXX_CONSTEXPR short 
868       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
870       static _GLIBCXX_CONSTEXPR short 
871       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
873       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
874       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
875       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
876       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
878       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
879       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
880       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
881       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
882        = denorm_absent;
883       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
885       static _GLIBCXX_CONSTEXPR short 
886       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
888       static _GLIBCXX_CONSTEXPR short 
889       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
891       static _GLIBCXX_CONSTEXPR short 
892       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
894       static _GLIBCXX_CONSTEXPR short 
895       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
897       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
898       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
899       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
901       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
902       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
903       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
904        = round_toward_zero;
905     };
907   /// numeric_limits<unsigned short> specialization.
908   template<>
909     struct numeric_limits<unsigned short>
910     {
911       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
913       static _GLIBCXX_CONSTEXPR unsigned short 
914       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
916       static _GLIBCXX_CONSTEXPR unsigned short 
917       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
919 #if __cplusplus >= 201103L
920       static constexpr unsigned short 
921       lowest() noexcept { return min(); }
922 #endif
924       static _GLIBCXX_USE_CONSTEXPR int digits 
925        = __glibcxx_digits (unsigned short);
926       static _GLIBCXX_USE_CONSTEXPR int digits10 
927        = __glibcxx_digits10 (unsigned short);
928 #if __cplusplus >= 201103L
929       static constexpr int max_digits10 = 0;
930 #endif
931       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
932       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
933       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
934       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
936       static _GLIBCXX_CONSTEXPR unsigned short 
937       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
939       static _GLIBCXX_CONSTEXPR unsigned short 
940       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
942       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
943       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
944       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
945       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
947       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
948       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
949       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
950       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
951        = denorm_absent;
952       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
954       static _GLIBCXX_CONSTEXPR unsigned short 
955       infinity() _GLIBCXX_USE_NOEXCEPT
956       { return static_cast<unsigned short>(0); }
958       static _GLIBCXX_CONSTEXPR unsigned short 
959       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
960       { return static_cast<unsigned short>(0); }
962       static _GLIBCXX_CONSTEXPR unsigned short 
963       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
964       { return static_cast<unsigned short>(0); }
966       static _GLIBCXX_CONSTEXPR unsigned short 
967       denorm_min() _GLIBCXX_USE_NOEXCEPT
968       { return static_cast<unsigned short>(0); }
970       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
971       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
972       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
974       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
975       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
976       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
977        = round_toward_zero;
978     };
980   /// numeric_limits<int> specialization.
981   template<>
982     struct numeric_limits<int>
983     {
984       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
986       static _GLIBCXX_CONSTEXPR int 
987       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
989       static _GLIBCXX_CONSTEXPR int 
990       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
992 #if __cplusplus >= 201103L
993       static constexpr int 
994       lowest() noexcept { return min(); }
995 #endif
997       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
998       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
999 #if __cplusplus >= 201103L
1000       static constexpr int max_digits10 = 0;
1001 #endif
1002       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1003       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1004       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1005       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1007       static _GLIBCXX_CONSTEXPR int 
1008       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1010       static _GLIBCXX_CONSTEXPR int 
1011       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1013       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1014       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1015       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1016       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1018       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1019       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1020       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1021       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1022        = denorm_absent;
1023       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1025       static _GLIBCXX_CONSTEXPR int 
1026       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1028       static _GLIBCXX_CONSTEXPR int 
1029       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1031       static _GLIBCXX_CONSTEXPR int 
1032       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1034       static _GLIBCXX_CONSTEXPR int 
1035       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1037       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1038       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1039       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1041       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1042       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1043       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1044        = round_toward_zero;
1045     };
1047   /// numeric_limits<unsigned int> specialization.
1048   template<>
1049     struct numeric_limits<unsigned int>
1050     {
1051       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1053       static _GLIBCXX_CONSTEXPR unsigned int 
1054       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1056       static _GLIBCXX_CONSTEXPR unsigned int 
1057       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
1059 #if __cplusplus >= 201103L
1060       static constexpr unsigned int 
1061       lowest() noexcept { return min(); }
1062 #endif
1064       static _GLIBCXX_USE_CONSTEXPR int digits 
1065        = __glibcxx_digits (unsigned int);
1066       static _GLIBCXX_USE_CONSTEXPR int digits10 
1067        = __glibcxx_digits10 (unsigned int);
1068 #if __cplusplus >= 201103L
1069       static constexpr int max_digits10 = 0;
1070 #endif
1071       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1072       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1073       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1074       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1076       static _GLIBCXX_CONSTEXPR unsigned int 
1077       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1079       static _GLIBCXX_CONSTEXPR unsigned int 
1080       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1082       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1083       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1084       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1085       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1087       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1088       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1089       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1090       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1091        = denorm_absent;
1092       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1094       static _GLIBCXX_CONSTEXPR unsigned int 
1095       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
1097       static _GLIBCXX_CONSTEXPR unsigned int 
1098       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1099       { return static_cast<unsigned int>(0); }
1101       static _GLIBCXX_CONSTEXPR unsigned int 
1102       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1103       { return static_cast<unsigned int>(0); }
1105       static _GLIBCXX_CONSTEXPR unsigned int 
1106       denorm_min() _GLIBCXX_USE_NOEXCEPT
1107       { return static_cast<unsigned int>(0); }
1109       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1110       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1111       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1113       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1114       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1115       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1116        = round_toward_zero;
1117     };
1119   /// numeric_limits<long> specialization.
1120   template<>
1121     struct numeric_limits<long>
1122     {
1123       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1125       static _GLIBCXX_CONSTEXPR long
1126       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
1128       static _GLIBCXX_CONSTEXPR long 
1129       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
1131 #if __cplusplus >= 201103L
1132       static constexpr long 
1133       lowest() noexcept { return min(); }
1134 #endif
1136       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
1137       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
1138 #if __cplusplus >= 201103L
1139       static constexpr int max_digits10 = 0;
1140 #endif
1141       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1142       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1143       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1144       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1146       static _GLIBCXX_CONSTEXPR long 
1147       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1149       static _GLIBCXX_CONSTEXPR long 
1150       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1152       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1153       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1154       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1155       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1157       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1158       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1159       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1160       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1161        = denorm_absent;
1162       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1164       static _GLIBCXX_CONSTEXPR long 
1165       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1167       static _GLIBCXX_CONSTEXPR long 
1168       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1170       static _GLIBCXX_CONSTEXPR long 
1171       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1173       static _GLIBCXX_CONSTEXPR long 
1174       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1176       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1177       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1178       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1180       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1181       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1182       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1183        = round_toward_zero;
1184     };
1186   /// numeric_limits<unsigned long> specialization.
1187   template<>
1188     struct numeric_limits<unsigned long>
1189     {
1190       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1192       static _GLIBCXX_CONSTEXPR unsigned long 
1193       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1195       static _GLIBCXX_CONSTEXPR unsigned long 
1196       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
1198 #if __cplusplus >= 201103L
1199       static constexpr unsigned long 
1200       lowest() noexcept { return min(); }
1201 #endif
1203       static _GLIBCXX_USE_CONSTEXPR int digits 
1204        = __glibcxx_digits (unsigned long);
1205       static _GLIBCXX_USE_CONSTEXPR int digits10 
1206        = __glibcxx_digits10 (unsigned long);
1207 #if __cplusplus >= 201103L
1208       static constexpr int max_digits10 = 0;
1209 #endif
1210       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1211       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1212       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1213       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1215       static _GLIBCXX_CONSTEXPR unsigned long 
1216       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1218       static _GLIBCXX_CONSTEXPR unsigned long 
1219       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1221       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1222       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1223       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1224       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1226       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1227       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1228       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1229       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1230        = denorm_absent;
1231       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1233       static _GLIBCXX_CONSTEXPR unsigned long 
1234       infinity() _GLIBCXX_USE_NOEXCEPT
1235       { return static_cast<unsigned long>(0); }
1237       static _GLIBCXX_CONSTEXPR unsigned long 
1238       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1239       { return static_cast<unsigned long>(0); }
1241       static _GLIBCXX_CONSTEXPR unsigned long 
1242       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1243       { return static_cast<unsigned long>(0); }
1245       static _GLIBCXX_CONSTEXPR unsigned long 
1246       denorm_min() _GLIBCXX_USE_NOEXCEPT
1247       { return static_cast<unsigned long>(0); }
1249       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1250       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1251       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1253       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1254       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1255       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1256        = round_toward_zero;
1257     };
1259   /// numeric_limits<long long> specialization.
1260   template<>
1261     struct numeric_limits<long long>
1262     {
1263       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1265       static _GLIBCXX_CONSTEXPR long long 
1266       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
1268       static _GLIBCXX_CONSTEXPR long long 
1269       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
1271 #if __cplusplus >= 201103L
1272       static constexpr long long 
1273       lowest() noexcept { return min(); }
1274 #endif
1276       static _GLIBCXX_USE_CONSTEXPR int digits 
1277        = __glibcxx_digits (long long);
1278       static _GLIBCXX_USE_CONSTEXPR int digits10 
1279        = __glibcxx_digits10 (long long);
1280 #if __cplusplus >= 201103L
1281       static constexpr int max_digits10 = 0;
1282 #endif
1283       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1284       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1285       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1286       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1288       static _GLIBCXX_CONSTEXPR long long 
1289       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1291       static _GLIBCXX_CONSTEXPR long long 
1292       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1294       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1295       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1296       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1297       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1299       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1300       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1301       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1302       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1303        = denorm_absent;
1304       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1306       static _GLIBCXX_CONSTEXPR long long 
1307       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1309       static _GLIBCXX_CONSTEXPR long long 
1310       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1312       static _GLIBCXX_CONSTEXPR long long 
1313       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1314       { return static_cast<long long>(0); }
1316       static _GLIBCXX_CONSTEXPR long long 
1317       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1319       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1320       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1321       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1323       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1324       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1325       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1326        = round_toward_zero;
1327     };
1329   /// numeric_limits<unsigned long long> specialization.
1330   template<>
1331     struct numeric_limits<unsigned long long>
1332     {
1333       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1335       static _GLIBCXX_CONSTEXPR unsigned long long 
1336       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1338       static _GLIBCXX_CONSTEXPR unsigned long long 
1339       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
1341 #if __cplusplus >= 201103L
1342       static constexpr unsigned long long 
1343       lowest() noexcept { return min(); }
1344 #endif
1346       static _GLIBCXX_USE_CONSTEXPR int digits 
1347        = __glibcxx_digits (unsigned long long);
1348       static _GLIBCXX_USE_CONSTEXPR int digits10 
1349        = __glibcxx_digits10 (unsigned long long);
1350 #if __cplusplus >= 201103L
1351       static constexpr int max_digits10 = 0;
1352 #endif
1353       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1354       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1355       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1356       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1358       static _GLIBCXX_CONSTEXPR unsigned long long 
1359       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1361       static _GLIBCXX_CONSTEXPR unsigned long long 
1362       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1364       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1365       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1366       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1367       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1369       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1370       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1371       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1372       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
1373        = denorm_absent;
1374       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1376       static _GLIBCXX_CONSTEXPR unsigned long long 
1377       infinity() _GLIBCXX_USE_NOEXCEPT
1378       { return static_cast<unsigned long long>(0); }
1380       static _GLIBCXX_CONSTEXPR unsigned long long 
1381       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1382       { return static_cast<unsigned long long>(0); }
1384       static _GLIBCXX_CONSTEXPR unsigned long long 
1385       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1386       { return static_cast<unsigned long long>(0); }
1388       static _GLIBCXX_CONSTEXPR unsigned long long 
1389       denorm_min() _GLIBCXX_USE_NOEXCEPT
1390       { return static_cast<unsigned long long>(0); }
1392       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1393       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1394       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1396       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1397       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1398       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1399        = round_toward_zero;
1400     };
1402 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
1403   /// numeric_limits<__int128> specialization.
1404   template<>
1405     struct numeric_limits<__int128>
1406     {
1407       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1409       static _GLIBCXX_CONSTEXPR __int128
1410       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
1412       static _GLIBCXX_CONSTEXPR __int128
1413       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
1415 #if __cplusplus >= 201103L
1416       static constexpr __int128
1417       lowest() noexcept { return min(); }
1418 #endif
1420       static _GLIBCXX_USE_CONSTEXPR int digits
1421        = __glibcxx_digits (__int128);
1422       static _GLIBCXX_USE_CONSTEXPR int digits10
1423        = __glibcxx_digits10 (__int128);
1424 #if __cplusplus >= 201103L
1425       static constexpr int max_digits10 = 0;
1426 #endif
1427       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1428       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1429       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1430       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1432       static _GLIBCXX_CONSTEXPR __int128
1433       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1435       static _GLIBCXX_CONSTEXPR __int128
1436       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1438       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1439       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1440       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1441       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1443       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1444       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1445       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1446       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1447        = denorm_absent;
1448       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1450       static _GLIBCXX_CONSTEXPR __int128
1451       infinity() _GLIBCXX_USE_NOEXCEPT
1452       { return static_cast<__int128>(0); }
1454       static _GLIBCXX_CONSTEXPR __int128
1455       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1456       { return static_cast<__int128>(0); }
1457       
1458       static _GLIBCXX_CONSTEXPR __int128
1459       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1460       { return static_cast<__int128>(0); }
1461       
1462       static _GLIBCXX_CONSTEXPR __int128
1463       denorm_min() _GLIBCXX_USE_NOEXCEPT
1464       { return static_cast<__int128>(0); }
1466       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1467       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1468       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1470       static _GLIBCXX_USE_CONSTEXPR bool traps
1471        = __glibcxx_integral_traps;
1472       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1473       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1474        = round_toward_zero;
1475     };
1477   /// numeric_limits<unsigned __int128> specialization.
1478   template<>
1479     struct numeric_limits<unsigned __int128>
1480     {
1481       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1483       static _GLIBCXX_CONSTEXPR unsigned __int128
1484       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1486       static _GLIBCXX_CONSTEXPR unsigned __int128
1487       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
1489 #if __cplusplus >= 201103L
1490       static constexpr unsigned __int128
1491       lowest() noexcept { return min(); }
1492 #endif
1494       static _GLIBCXX_USE_CONSTEXPR int digits
1495        = __glibcxx_digits (unsigned __int128);
1496       static _GLIBCXX_USE_CONSTEXPR int digits10
1497        = __glibcxx_digits10 (unsigned __int128);
1498 #if __cplusplus >= 201103L
1499       static constexpr int max_digits10 = 0;
1500 #endif
1501       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1502       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1503       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1504       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1506       static _GLIBCXX_CONSTEXPR unsigned __int128
1507       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1509       static _GLIBCXX_CONSTEXPR unsigned __int128
1510       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1512       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1513       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1514       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1515       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1517       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1518       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1519       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1520       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1521        = denorm_absent;
1522       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1524       static _GLIBCXX_CONSTEXPR unsigned __int128
1525       infinity() _GLIBCXX_USE_NOEXCEPT
1526       { return static_cast<unsigned __int128>(0); }
1528       static _GLIBCXX_CONSTEXPR unsigned __int128
1529       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1530       { return static_cast<unsigned __int128>(0); }
1532       static _GLIBCXX_CONSTEXPR unsigned __int128
1533       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1534       { return static_cast<unsigned __int128>(0); }
1536       static _GLIBCXX_CONSTEXPR unsigned __int128
1537       denorm_min() _GLIBCXX_USE_NOEXCEPT
1538       { return static_cast<unsigned __int128>(0); }
1540       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1541       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1542       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1544       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1545       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1546       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1547        = round_toward_zero;
1548     };
1549 #endif
1551   /// numeric_limits<float> specialization.
1552   template<>
1553     struct numeric_limits<float>
1554     {
1555       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1557       static _GLIBCXX_CONSTEXPR float 
1558       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
1560       static _GLIBCXX_CONSTEXPR float 
1561       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
1563 #if __cplusplus >= 201103L
1564       static constexpr float 
1565       lowest() noexcept { return -__FLT_MAX__; }
1566 #endif
1568       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
1569       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
1570 #if __cplusplus >= 201103L
1571       static constexpr int max_digits10
1572          = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
1573 #endif
1574       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1575       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1576       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1577       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1579       static _GLIBCXX_CONSTEXPR float 
1580       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
1582       static _GLIBCXX_CONSTEXPR float 
1583       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
1585       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
1586       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
1587       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
1588       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
1590       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
1591       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
1592       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1593       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1594         = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
1595       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
1596        = __glibcxx_float_has_denorm_loss;
1598       static _GLIBCXX_CONSTEXPR float 
1599       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
1601       static _GLIBCXX_CONSTEXPR float 
1602       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
1604       static _GLIBCXX_CONSTEXPR float 
1605       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
1607       static _GLIBCXX_CONSTEXPR float 
1608       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
1610       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1611         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1612       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1613       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1615       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
1616       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
1617        = __glibcxx_float_tinyness_before;
1618       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1619        = round_to_nearest;
1620     };
1622 #undef __glibcxx_float_has_denorm_loss
1623 #undef __glibcxx_float_traps
1624 #undef __glibcxx_float_tinyness_before
1626   /// numeric_limits<double> specialization.
1627   template<>
1628     struct numeric_limits<double>
1629     {
1630       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1632       static _GLIBCXX_CONSTEXPR double 
1633       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
1635       static _GLIBCXX_CONSTEXPR double 
1636       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
1638 #if __cplusplus >= 201103L
1639       static constexpr double 
1640       lowest() noexcept { return -__DBL_MAX__; }
1641 #endif
1643       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
1644       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
1645 #if __cplusplus >= 201103L
1646       static constexpr int max_digits10
1647          = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
1648 #endif
1649       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1650       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1651       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1652       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1654       static _GLIBCXX_CONSTEXPR double 
1655       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
1657       static _GLIBCXX_CONSTEXPR double 
1658       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
1660       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
1661       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
1662       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
1663       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
1665       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
1666       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
1667       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1668       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1669         = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1670       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
1671         = __glibcxx_double_has_denorm_loss;
1673       static _GLIBCXX_CONSTEXPR double 
1674       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
1676       static _GLIBCXX_CONSTEXPR double 
1677       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
1679       static _GLIBCXX_CONSTEXPR double 
1680       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
1682       static _GLIBCXX_CONSTEXPR double 
1683       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
1685       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1686         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1687       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1688       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1690       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
1691       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
1692        = __glibcxx_double_tinyness_before;
1693       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
1694        = round_to_nearest;
1695     };
1697 #undef __glibcxx_double_has_denorm_loss
1698 #undef __glibcxx_double_traps
1699 #undef __glibcxx_double_tinyness_before
1701   /// numeric_limits<long double> specialization.
1702   template<>
1703     struct numeric_limits<long double>
1704     {
1705       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1707       static _GLIBCXX_CONSTEXPR long double 
1708       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
1710       static _GLIBCXX_CONSTEXPR long double 
1711       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
1713 #if __cplusplus >= 201103L
1714       static constexpr long double 
1715       lowest() noexcept { return -__LDBL_MAX__; }
1716 #endif
1718       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
1719       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
1720 #if __cplusplus >= 201103L
1721       static _GLIBCXX_USE_CONSTEXPR int max_digits10
1722          = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
1723 #endif
1724       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1725       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1726       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1727       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1729       static _GLIBCXX_CONSTEXPR long double 
1730       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
1732       static _GLIBCXX_CONSTEXPR long double 
1733       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
1735       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
1736       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
1737       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
1738       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
1740       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
1741       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
1742       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1743       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1744         = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1745       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1746         = __glibcxx_long_double_has_denorm_loss;
1748       static _GLIBCXX_CONSTEXPR long double 
1749       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
1751       static _GLIBCXX_CONSTEXPR long double 
1752       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
1754       static _GLIBCXX_CONSTEXPR long double 
1755       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
1757       static _GLIBCXX_CONSTEXPR long double 
1758       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
1760       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1761         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1762       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1763       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1765       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
1766       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 
1767                                          __glibcxx_long_double_tinyness_before;
1768       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
1769                                                       round_to_nearest;
1770     };
1772 #undef __glibcxx_long_double_has_denorm_loss
1773 #undef __glibcxx_long_double_traps
1774 #undef __glibcxx_long_double_tinyness_before
1776 _GLIBCXX_END_NAMESPACE_VERSION
1777 } // namespace
1779 #undef __glibcxx_signed
1780 #undef __glibcxx_min
1781 #undef __glibcxx_max
1782 #undef __glibcxx_digits
1783 #undef __glibcxx_digits10
1784 #undef __glibcxx_max_digits10
1786 #endif // _GLIBCXX_NUMERIC_LIMITS