libstdc++
limits
Go to the documentation of this file.
1 // The template and inlines for the numeric_limits classes. -*- C++ -*-
2 
3 // Copyright (C) 1999-2022 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.
10 
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.
15 
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.
19 
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/>.
24 
25 /** @file include/limits
26  * This is a Standard C++ Library header.
27  */
28 
29 // Note: this is not a conforming implementation.
30 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
31 
32 //
33 // ISO 14882:1998
34 // 18.2.1
35 //
36 
37 #ifndef _GLIBCXX_NUMERIC_LIMITS
38 #define _GLIBCXX_NUMERIC_LIMITS 1
39 
40 #pragma GCC system_header
41 
42 #include <bits/c++config.h>
43 
44 //
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)
54 //
55 // * floating points
56 // float (1)
57 // double (1)
58 // long double (1)
59 //
60 // GNU C++ understands (where supported by the host C-library)
61 // * integer
62 // long long, unsigned long long (2)
63 //
64 // which brings us to 16 fundamental arithmetic data types in GNU C++.
65 //
66 //
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.
71 //
72 
73 // These values can be overridden in the target configuration file.
74 // The default values are appropriate for many 32-bit targets.
75 
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
82 
83 // float
84 //
85 
86 // Default values. Should be overridden in configuration files if necessary.
87 
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
97 
98 // double
99 
100 // Default values. Should be overridden in configuration files if necessary.
101 
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
111 
112 // long double
113 
114 // Default values. Should be overridden in configuration files if necessary.
115 
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
125 
126 // You should not need to define any macros below this point.
127 
128 #define __glibcxx_signed_b(T,B) ((T)(-1) < 0)
129 
130 #define __glibcxx_min_b(T,B) \
131  (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0)
132 
133 #define __glibcxx_max_b(T,B) \
134  (__glibcxx_signed_b (T,B) ? \
135  (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0)
136 
137 #define __glibcxx_digits_b(T,B) \
138  (B - __glibcxx_signed_b (T,B))
139 
140 // The fraction 643/2136 approximates log10(2) to 7 significant digits.
141 #define __glibcxx_digits10_b(T,B) \
142  (__glibcxx_digits_b (T,B) * 643L / 2136)
143 
144 #define __glibcxx_signed(T) \
145  __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__)
146 #define __glibcxx_min(T) \
147  __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__)
148 #define __glibcxx_max(T) \
149  __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__)
150 #define __glibcxx_digits(T) \
151  __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__)
152 #define __glibcxx_digits10(T) \
153  __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__)
154 
155 #define __glibcxx_max_digits10(T) \
156  (2 + (T) * 643L / 2136)
157 
158 namespace std _GLIBCXX_VISIBILITY(default)
159 {
160 _GLIBCXX_BEGIN_NAMESPACE_VERSION
161 
162  /**
163  * @brief Describes the rounding style for floating-point types.
164  *
165  * This is used in the std::numeric_limits class.
166  */
167  enum float_round_style
168  {
169  round_indeterminate = -1, /// Intermediate.
170  round_toward_zero = 0, /// To zero.
171  round_to_nearest = 1, /// To the nearest representable value.
172  round_toward_infinity = 2, /// To infinity.
173  round_toward_neg_infinity = 3 /// To negative infinity.
174  };
175 
176  /**
177  * @brief Describes the denormalization for floating-point types.
178  *
179  * These values represent the presence or absence of a variable number
180  * of exponent bits. This type is used in the std::numeric_limits class.
181  */
182  enum float_denorm_style
183  {
184  /// Indeterminate at compile time whether denormalized values are allowed.
185  denorm_indeterminate = -1,
186  /// The type does not allow denormalized values.
187  denorm_absent = 0,
188  /// The type allows denormalized values.
189  denorm_present = 1
190  };
191 
192  /**
193  * @brief Part of std::numeric_limits.
194  *
195  * The @c static @c const members are usable as integral constant
196  * expressions.
197  *
198  * @note This is a separate class for purposes of efficiency; you
199  * should only access these members as part of an instantiation
200  * of the std::numeric_limits class.
201  */
202  struct __numeric_limits_base
203  {
204  /** This will be true for all fundamental types (which have
205  specializations), and false for everything else. */
206  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
207 
208  /** The number of @c radix digits that be represented without change: for
209  integer types, the number of non-sign bits in the mantissa; for
210  floating types, the number of @c radix digits in the mantissa. */
211  static _GLIBCXX_USE_CONSTEXPR int digits = 0;
212 
213  /** The number of base 10 digits that can be represented without change. */
214  static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
215 
216 #if __cplusplus >= 201103L
217  /** The number of base 10 digits required to ensure that values which
218  differ are always differentiated. */
219  static constexpr int max_digits10 = 0;
220 #endif
221 
222  /** True if the type is signed. */
223  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
224 
225  /** True if the type is integer. */
226  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
227 
228  /** True if the type uses an exact representation. All integer types are
229  exact, but not all exact types are integer. For example, rational and
230  fixed-exponent representations are exact but not integer. */
231  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
232 
233  /** For integer types, specifies the base of the representation. For
234  floating types, specifies the base of the exponent representation. */
235  static _GLIBCXX_USE_CONSTEXPR int radix = 0;
236 
237  /** The minimum negative integer such that @c radix raised to the power of
238  (one less than that integer) is a normalized floating point number. */
239  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
240 
241  /** The minimum negative integer such that 10 raised to that power is in
242  the range of normalized floating point numbers. */
243  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
244 
245  /** The maximum positive integer such that @c radix raised to the power of
246  (one less than that integer) is a representable finite floating point
247  number. */
248  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
249 
250  /** The maximum positive integer such that 10 raised to that power is in
251  the range of representable finite floating point numbers. */
252  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
253 
254  /** True if the type has a representation for positive infinity. */
255  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
256 
257  /** True if the type has a representation for a quiet (non-signaling)
258  Not a Number. */
259  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
260 
261  /** True if the type has a representation for a signaling
262  Not a Number. */
263  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
264 
265  /** See std::float_denorm_style for more information. */
266  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
267 
268  /** True if loss of accuracy is detected as a denormalization loss,
269  rather than as an inexact result. */
270  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
271 
272  /** True if-and-only-if the type adheres to the IEC 559 standard, also
273  known as IEEE 754. (Only makes sense for floating point types.) */
274  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
275 
276  /** True if the set of values representable by the type is
277  finite. All built-in types are bounded, this member would be
278  false for arbitrary precision types. */
279  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
280 
281  /** True if the type is @e modulo. A type is modulo if, for any
282  operation involving +, -, or * on values of that type whose
283  result would fall outside the range [min(),max()], the value
284  returned differs from the true value by an integer multiple of
285  max() - min() + 1. On most machines, this is false for floating
286  types, true for unsigned integers, and true for signed integers.
287  See PR22200 about signed integers. */
288  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
289 
290  /** True if trapping is implemented for this type. */
291  static _GLIBCXX_USE_CONSTEXPR bool traps = false;
292 
293  /** True if tininess is detected before rounding. (see IEC 559) */
294  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
295 
296  /** See std::float_round_style for more information. This is only
297  meaningful for floating types; integer types will all be
298  round_toward_zero. */
299  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
300  round_toward_zero;
301  };
302 
303  /**
304  * @brief Properties of fundamental types.
305  *
306  * This class allows a program to obtain information about the
307  * representation of a fundamental type on a given platform. For
308  * non-fundamental types, the functions will return 0 and the data
309  * members will all be @c false.
310  */
311  template<typename _Tp>
312  struct numeric_limits : public __numeric_limits_base
313  {
314  /** The minimum finite value, or for floating types with
315  denormalization, the minimum positive normalized value. */
316  static _GLIBCXX_CONSTEXPR _Tp
317  min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
318 
319  /** The maximum finite value. */
320  static _GLIBCXX_CONSTEXPR _Tp
321  max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
322 
323 #if __cplusplus >= 201103L
324  /** A finite value x such that there is no other finite value y
325  * where y < x. */
326  static constexpr _Tp
327  lowest() noexcept { return _Tp(); }
328 #endif
329 
330  /** The @e machine @e epsilon: the difference between 1 and the least
331  value greater than 1 that is representable. */
332  static _GLIBCXX_CONSTEXPR _Tp
333  epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
334 
335  /** The maximum rounding error measurement (see LIA-1). */
336  static _GLIBCXX_CONSTEXPR _Tp
337  round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
338 
339  /** The representation of positive infinity, if @c has_infinity. */
340  static _GLIBCXX_CONSTEXPR _Tp
341  infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
342 
343  /** The representation of a quiet Not a Number,
344  if @c has_quiet_NaN. */
345  static _GLIBCXX_CONSTEXPR _Tp
346  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
347 
348  /** The representation of a signaling Not a Number, if
349  @c has_signaling_NaN. */
350  static _GLIBCXX_CONSTEXPR _Tp
351  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
352 
353  /** The minimum positive denormalized value. For types where
354  @c has_denorm is false, this is the minimum positive normalized
355  value. */
356  static _GLIBCXX_CONSTEXPR _Tp
357  denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
358  };
359 
360  // _GLIBCXX_RESOLVE_LIB_DEFECTS
361  // 559. numeric_limits<const T>
362 
363  template<typename _Tp>
364  struct numeric_limits<const _Tp>
365  : public numeric_limits<_Tp> { };
366 
367  template<typename _Tp>
368  struct numeric_limits<volatile _Tp>
369  : public numeric_limits<_Tp> { };
370 
371  template<typename _Tp>
372  struct numeric_limits<const volatile _Tp>
373  : public numeric_limits<_Tp> { };
374 
375  // Now there follow 16 explicit specializations. Yes, 16. Make sure
376  // you get the count right. (18 in C++11 mode, with char16_t and char32_t.)
377  // (+1 if char8_t is enabled.)
378 
379  // _GLIBCXX_RESOLVE_LIB_DEFECTS
380  // 184. numeric_limits<bool> wording problems
381 
382  /// numeric_limits<bool> specialization.
383  template<>
384  struct numeric_limits<bool>
385  {
386  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
387 
388  static _GLIBCXX_CONSTEXPR bool
389  min() _GLIBCXX_USE_NOEXCEPT { return false; }
390 
391  static _GLIBCXX_CONSTEXPR bool
392  max() _GLIBCXX_USE_NOEXCEPT { return true; }
393 
394 #if __cplusplus >= 201103L
395  static constexpr bool
396  lowest() noexcept { return min(); }
397 #endif
398  static _GLIBCXX_USE_CONSTEXPR int digits = 1;
399  static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
400 #if __cplusplus >= 201103L
401  static constexpr int max_digits10 = 0;
402 #endif
403  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
404  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
405  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
406  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
407 
408  static _GLIBCXX_CONSTEXPR bool
409  epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
410 
411  static _GLIBCXX_CONSTEXPR bool
412  round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
413 
414  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
415  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
416  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
417  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
418 
419  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
420  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
421  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
422  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
423  = denorm_absent;
424  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
425 
426  static _GLIBCXX_CONSTEXPR bool
427  infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
428 
429  static _GLIBCXX_CONSTEXPR bool
430  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
431 
432  static _GLIBCXX_CONSTEXPR bool
433  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
434 
435  static _GLIBCXX_CONSTEXPR bool
436  denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
437 
438  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
439  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
440  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
441 
442  // It is not clear what it means for a boolean type to trap.
443  // This is a DR on the LWG issue list. Here, I use integer
444  // promotion semantics.
445  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
446  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
447  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
448  = round_toward_zero;
449  };
450 
451  /// numeric_limits<char> specialization.
452  template<>
453  struct numeric_limits<char>
454  {
455  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
456 
457  static _GLIBCXX_CONSTEXPR char
458  min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
459 
460  static _GLIBCXX_CONSTEXPR char
461  max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
462 
463 #if __cplusplus >= 201103L
464  static constexpr char
465  lowest() noexcept { return min(); }
466 #endif
467 
468  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
469  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
470 #if __cplusplus >= 201103L
471  static constexpr int max_digits10 = 0;
472 #endif
473  static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
474  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
475  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
476  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
477 
478  static _GLIBCXX_CONSTEXPR char
479  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
480 
481  static _GLIBCXX_CONSTEXPR char
482  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
483 
484  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
485  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
486  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
487  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
488 
489  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
490  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
491  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
492  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
493  = denorm_absent;
494  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
495 
496  static _GLIBCXX_CONSTEXPR
497  char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
498 
499  static _GLIBCXX_CONSTEXPR char
500  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
501 
502  static _GLIBCXX_CONSTEXPR char
503  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
504 
505  static _GLIBCXX_CONSTEXPR char
506  denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
507 
508  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
509  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
510  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
511 
512  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
513  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
514  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
515  = round_toward_zero;
516  };
517 
518  /// numeric_limits<signed char> specialization.
519  template<>
520  struct numeric_limits<signed char>
521  {
522  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
523 
524  static _GLIBCXX_CONSTEXPR signed char
525  min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
526 
527  static _GLIBCXX_CONSTEXPR signed char
528  max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
529 
530 #if __cplusplus >= 201103L
531  static constexpr signed char
532  lowest() noexcept { return min(); }
533 #endif
534 
535  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
536  static _GLIBCXX_USE_CONSTEXPR int digits10
537  = __glibcxx_digits10 (signed char);
538 #if __cplusplus >= 201103L
539  static constexpr int max_digits10 = 0;
540 #endif
541  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
542  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
543  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
544  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
545 
546  static _GLIBCXX_CONSTEXPR signed char
547  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
548 
549  static _GLIBCXX_CONSTEXPR signed char
550  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
551 
552  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
553  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
554  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
555  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
556 
557  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
558  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
559  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
560  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
561  = denorm_absent;
562  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
563 
564  static _GLIBCXX_CONSTEXPR signed char
565  infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
566 
567  static _GLIBCXX_CONSTEXPR signed char
568  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
569 
570  static _GLIBCXX_CONSTEXPR signed char
571  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
572  { return static_cast<signed char>(0); }
573 
574  static _GLIBCXX_CONSTEXPR signed char
575  denorm_min() _GLIBCXX_USE_NOEXCEPT
576  { return static_cast<signed char>(0); }
577 
578  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
579  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
580  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
581 
582  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
583  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
584  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
585  = round_toward_zero;
586  };
587 
588  /// numeric_limits<unsigned char> specialization.
589  template<>
590  struct numeric_limits<unsigned char>
591  {
592  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
593 
594  static _GLIBCXX_CONSTEXPR unsigned char
595  min() _GLIBCXX_USE_NOEXCEPT { return 0; }
596 
597  static _GLIBCXX_CONSTEXPR unsigned char
598  max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
599 
600 #if __cplusplus >= 201103L
601  static constexpr unsigned char
602  lowest() noexcept { return min(); }
603 #endif
604 
605  static _GLIBCXX_USE_CONSTEXPR int digits
606  = __glibcxx_digits (unsigned char);
607  static _GLIBCXX_USE_CONSTEXPR int digits10
608  = __glibcxx_digits10 (unsigned char);
609 #if __cplusplus >= 201103L
610  static constexpr int max_digits10 = 0;
611 #endif
612  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
613  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
614  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
615  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
616 
617  static _GLIBCXX_CONSTEXPR unsigned char
618  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
619 
620  static _GLIBCXX_CONSTEXPR unsigned char
621  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
622 
623  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
624  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
625  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
626  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
627 
628  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
629  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
630  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
631  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
632  = denorm_absent;
633  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
634 
635  static _GLIBCXX_CONSTEXPR unsigned char
636  infinity() _GLIBCXX_USE_NOEXCEPT
637  { return static_cast<unsigned char>(0); }
638 
639  static _GLIBCXX_CONSTEXPR unsigned char
640  quiet_NaN() _GLIBCXX_USE_NOEXCEPT
641  { return static_cast<unsigned char>(0); }
642 
643  static _GLIBCXX_CONSTEXPR unsigned char
644  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
645  { return static_cast<unsigned char>(0); }
646 
647  static _GLIBCXX_CONSTEXPR unsigned char
648  denorm_min() _GLIBCXX_USE_NOEXCEPT
649  { return static_cast<unsigned char>(0); }
650 
651  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
652  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
653  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
654 
655  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
656  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
657  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
658  = round_toward_zero;
659  };
660 
661  /// numeric_limits<wchar_t> specialization.
662  template<>
663  struct numeric_limits<wchar_t>
664  {
665  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
666 
667  static _GLIBCXX_CONSTEXPR wchar_t
668  min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
669 
670  static _GLIBCXX_CONSTEXPR wchar_t
671  max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
672 
673 #if __cplusplus >= 201103L
674  static constexpr wchar_t
675  lowest() noexcept { return min(); }
676 #endif
677 
678  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
679  static _GLIBCXX_USE_CONSTEXPR int digits10
680  = __glibcxx_digits10 (wchar_t);
681 #if __cplusplus >= 201103L
682  static constexpr int max_digits10 = 0;
683 #endif
684  static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
685  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
686  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
687  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
688 
689  static _GLIBCXX_CONSTEXPR wchar_t
690  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
691 
692  static _GLIBCXX_CONSTEXPR wchar_t
693  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
694 
695  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
696  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
697  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
698  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
699 
700  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
701  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
702  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
703  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
704  = denorm_absent;
705  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
706 
707  static _GLIBCXX_CONSTEXPR wchar_t
708  infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
709 
710  static _GLIBCXX_CONSTEXPR wchar_t
711  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
712 
713  static _GLIBCXX_CONSTEXPR wchar_t
714  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
715 
716  static _GLIBCXX_CONSTEXPR wchar_t
717  denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
718 
719  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
720  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
721  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
722 
723  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
724  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
725  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
726  = round_toward_zero;
727  };
728 
729 #if _GLIBCXX_USE_CHAR8_T
730  /// numeric_limits<char8_t> specialization.
731  template<>
732  struct numeric_limits<char8_t>
733  {
734  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
735 
736  static _GLIBCXX_CONSTEXPR char8_t
737  min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); }
738 
739  static _GLIBCXX_CONSTEXPR char8_t
740  max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); }
741 
742  static _GLIBCXX_CONSTEXPR char8_t
743  lowest() _GLIBCXX_USE_NOEXCEPT { return min(); }
744 
745  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t);
746  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t);
747  static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0;
748  static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t);
749  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
750  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
751  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
752 
753  static _GLIBCXX_CONSTEXPR char8_t
754  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
755 
756  static _GLIBCXX_CONSTEXPR char8_t
757  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
758 
759  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
760  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
761  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
762  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
763 
764  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
765  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
766  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
767  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
768  = denorm_absent;
769  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
770 
771  static _GLIBCXX_CONSTEXPR char8_t
772  infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
773 
774  static _GLIBCXX_CONSTEXPR char8_t
775  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
776 
777  static _GLIBCXX_CONSTEXPR char8_t
778  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
779 
780  static _GLIBCXX_CONSTEXPR char8_t
781  denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
782 
783  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
784  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
785  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
786 
787  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
788  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
789  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
790  = round_toward_zero;
791  };
792 #endif
793 
794 #if __cplusplus >= 201103L
795  /// numeric_limits<char16_t> specialization.
796  template<>
797  struct numeric_limits<char16_t>
798  {
799  static constexpr bool is_specialized = true;
800 
801  static constexpr char16_t
802  min() noexcept { return __glibcxx_min (char16_t); }
803 
804  static constexpr char16_t
805  max() noexcept { return __glibcxx_max (char16_t); }
806 
807  static constexpr char16_t
808  lowest() noexcept { return min(); }
809 
810  static constexpr int digits = __glibcxx_digits (char16_t);
811  static constexpr int digits10 = __glibcxx_digits10 (char16_t);
812  static constexpr int max_digits10 = 0;
813  static constexpr bool is_signed = __glibcxx_signed (char16_t);
814  static constexpr bool is_integer = true;
815  static constexpr bool is_exact = true;
816  static constexpr int radix = 2;
817 
818  static constexpr char16_t
819  epsilon() noexcept { return 0; }
820 
821  static constexpr char16_t
822  round_error() noexcept { return 0; }
823 
824  static constexpr int min_exponent = 0;
825  static constexpr int min_exponent10 = 0;
826  static constexpr int max_exponent = 0;
827  static constexpr int max_exponent10 = 0;
828 
829  static constexpr bool has_infinity = false;
830  static constexpr bool has_quiet_NaN = false;
831  static constexpr bool has_signaling_NaN = false;
832  static constexpr float_denorm_style has_denorm = denorm_absent;
833  static constexpr bool has_denorm_loss = false;
834 
835  static constexpr char16_t
836  infinity() noexcept { return char16_t(); }
837 
838  static constexpr char16_t
839  quiet_NaN() noexcept { return char16_t(); }
840 
841  static constexpr char16_t
842  signaling_NaN() noexcept { return char16_t(); }
843 
844  static constexpr char16_t
845  denorm_min() noexcept { return char16_t(); }
846 
847  static constexpr bool is_iec559 = false;
848  static constexpr bool is_bounded = true;
849  static constexpr bool is_modulo = !is_signed;
850 
851  static constexpr bool traps = __glibcxx_integral_traps;
852  static constexpr bool tinyness_before = false;
853  static constexpr float_round_style round_style = round_toward_zero;
854  };
855 
856  /// numeric_limits<char32_t> specialization.
857  template<>
858  struct numeric_limits<char32_t>
859  {
860  static constexpr bool is_specialized = true;
861 
862  static constexpr char32_t
863  min() noexcept { return __glibcxx_min (char32_t); }
864 
865  static constexpr char32_t
866  max() noexcept { return __glibcxx_max (char32_t); }
867 
868  static constexpr char32_t
869  lowest() noexcept { return min(); }
870 
871  static constexpr int digits = __glibcxx_digits (char32_t);
872  static constexpr int digits10 = __glibcxx_digits10 (char32_t);
873  static constexpr int max_digits10 = 0;
874  static constexpr bool is_signed = __glibcxx_signed (char32_t);
875  static constexpr bool is_integer = true;
876  static constexpr bool is_exact = true;
877  static constexpr int radix = 2;
878 
879  static constexpr char32_t
880  epsilon() noexcept { return 0; }
881 
882  static constexpr char32_t
883  round_error() noexcept { return 0; }
884 
885  static constexpr int min_exponent = 0;
886  static constexpr int min_exponent10 = 0;
887  static constexpr int max_exponent = 0;
888  static constexpr int max_exponent10 = 0;
889 
890  static constexpr bool has_infinity = false;
891  static constexpr bool has_quiet_NaN = false;
892  static constexpr bool has_signaling_NaN = false;
893  static constexpr float_denorm_style has_denorm = denorm_absent;
894  static constexpr bool has_denorm_loss = false;
895 
896  static constexpr char32_t
897  infinity() noexcept { return char32_t(); }
898 
899  static constexpr char32_t
900  quiet_NaN() noexcept { return char32_t(); }
901 
902  static constexpr char32_t
903  signaling_NaN() noexcept { return char32_t(); }
904 
905  static constexpr char32_t
906  denorm_min() noexcept { return char32_t(); }
907 
908  static constexpr bool is_iec559 = false;
909  static constexpr bool is_bounded = true;
910  static constexpr bool is_modulo = !is_signed;
911 
912  static constexpr bool traps = __glibcxx_integral_traps;
913  static constexpr bool tinyness_before = false;
914  static constexpr float_round_style round_style = round_toward_zero;
915  };
916 #endif
917 
918  /// numeric_limits<short> specialization.
919  template<>
920  struct numeric_limits<short>
921  {
922  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
923 
924  static _GLIBCXX_CONSTEXPR short
925  min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
926 
927  static _GLIBCXX_CONSTEXPR short
928  max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
929 
930 #if __cplusplus >= 201103L
931  static constexpr short
932  lowest() noexcept { return min(); }
933 #endif
934 
935  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
936  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
937 #if __cplusplus >= 201103L
938  static constexpr int max_digits10 = 0;
939 #endif
940  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
941  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
942  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
943  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
944 
945  static _GLIBCXX_CONSTEXPR short
946  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
947 
948  static _GLIBCXX_CONSTEXPR short
949  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
950 
951  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
952  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
953  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
954  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
955 
956  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
957  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
958  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
959  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
960  = denorm_absent;
961  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
962 
963  static _GLIBCXX_CONSTEXPR short
964  infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
965 
966  static _GLIBCXX_CONSTEXPR short
967  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
968 
969  static _GLIBCXX_CONSTEXPR short
970  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
971 
972  static _GLIBCXX_CONSTEXPR short
973  denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
974 
975  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
976  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
977  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
978 
979  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
980  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
981  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
982  = round_toward_zero;
983  };
984 
985  /// numeric_limits<unsigned short> specialization.
986  template<>
987  struct numeric_limits<unsigned short>
988  {
989  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
990 
991  static _GLIBCXX_CONSTEXPR unsigned short
992  min() _GLIBCXX_USE_NOEXCEPT { return 0; }
993 
994  static _GLIBCXX_CONSTEXPR unsigned short
995  max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
996 
997 #if __cplusplus >= 201103L
998  static constexpr unsigned short
999  lowest() noexcept { return min(); }
1000 #endif
1001 
1002  static _GLIBCXX_USE_CONSTEXPR int digits
1003  = __glibcxx_digits (unsigned short);
1004  static _GLIBCXX_USE_CONSTEXPR int digits10
1005  = __glibcxx_digits10 (unsigned short);
1006 #if __cplusplus >= 201103L
1007  static constexpr int max_digits10 = 0;
1008 #endif
1009  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1010  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1011  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1012  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1013 
1014  static _GLIBCXX_CONSTEXPR unsigned short
1015  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1016 
1017  static _GLIBCXX_CONSTEXPR unsigned short
1018  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1019 
1020  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1021  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1022  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1023  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1024 
1025  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1026  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1027  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1028  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1029  = denorm_absent;
1030  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1031 
1032  static _GLIBCXX_CONSTEXPR unsigned short
1033  infinity() _GLIBCXX_USE_NOEXCEPT
1034  { return static_cast<unsigned short>(0); }
1035 
1036  static _GLIBCXX_CONSTEXPR unsigned short
1037  quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1038  { return static_cast<unsigned short>(0); }
1039 
1040  static _GLIBCXX_CONSTEXPR unsigned short
1041  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1042  { return static_cast<unsigned short>(0); }
1043 
1044  static _GLIBCXX_CONSTEXPR unsigned short
1045  denorm_min() _GLIBCXX_USE_NOEXCEPT
1046  { return static_cast<unsigned short>(0); }
1047 
1048  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1049  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1050  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1051 
1052  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1053  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1054  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1055  = round_toward_zero;
1056  };
1057 
1058  /// numeric_limits<int> specialization.
1059  template<>
1060  struct numeric_limits<int>
1061  {
1062  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1063 
1064  static _GLIBCXX_CONSTEXPR int
1065  min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
1066 
1067  static _GLIBCXX_CONSTEXPR int
1068  max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
1069 
1070 #if __cplusplus >= 201103L
1071  static constexpr int
1072  lowest() noexcept { return min(); }
1073 #endif
1074 
1075  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
1076  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
1077 #if __cplusplus >= 201103L
1078  static constexpr int max_digits10 = 0;
1079 #endif
1080  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1081  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1082  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1083  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1084 
1085  static _GLIBCXX_CONSTEXPR int
1086  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1087 
1088  static _GLIBCXX_CONSTEXPR int
1089  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1090 
1091  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1092  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1093  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1094  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1095 
1096  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1097  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1098  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1099  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1100  = denorm_absent;
1101  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1102 
1103  static _GLIBCXX_CONSTEXPR int
1104  infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1105 
1106  static _GLIBCXX_CONSTEXPR int
1107  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1108 
1109  static _GLIBCXX_CONSTEXPR int
1110  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1111 
1112  static _GLIBCXX_CONSTEXPR int
1113  denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1114 
1115  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1116  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1117  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1118 
1119  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1120  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1121  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1122  = round_toward_zero;
1123  };
1124 
1125  /// numeric_limits<unsigned int> specialization.
1126  template<>
1127  struct numeric_limits<unsigned int>
1128  {
1129  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1130 
1131  static _GLIBCXX_CONSTEXPR unsigned int
1132  min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1133 
1134  static _GLIBCXX_CONSTEXPR unsigned int
1135  max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
1136 
1137 #if __cplusplus >= 201103L
1138  static constexpr unsigned int
1139  lowest() noexcept { return min(); }
1140 #endif
1141 
1142  static _GLIBCXX_USE_CONSTEXPR int digits
1143  = __glibcxx_digits (unsigned int);
1144  static _GLIBCXX_USE_CONSTEXPR int digits10
1145  = __glibcxx_digits10 (unsigned int);
1146 #if __cplusplus >= 201103L
1147  static constexpr int max_digits10 = 0;
1148 #endif
1149  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1150  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1151  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1152  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1153 
1154  static _GLIBCXX_CONSTEXPR unsigned int
1155  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1156 
1157  static _GLIBCXX_CONSTEXPR unsigned int
1158  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1159 
1160  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1161  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1162  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1163  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1164 
1165  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1166  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1167  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1168  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1169  = denorm_absent;
1170  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1171 
1172  static _GLIBCXX_CONSTEXPR unsigned int
1173  infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
1174 
1175  static _GLIBCXX_CONSTEXPR unsigned int
1176  quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1177  { return static_cast<unsigned int>(0); }
1178 
1179  static _GLIBCXX_CONSTEXPR unsigned int
1180  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1181  { return static_cast<unsigned int>(0); }
1182 
1183  static _GLIBCXX_CONSTEXPR unsigned int
1184  denorm_min() _GLIBCXX_USE_NOEXCEPT
1185  { return static_cast<unsigned int>(0); }
1186 
1187  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1188  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1189  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1190 
1191  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1192  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1193  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1194  = round_toward_zero;
1195  };
1196 
1197  /// numeric_limits<long> specialization.
1198  template<>
1199  struct numeric_limits<long>
1200  {
1201  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1202 
1203  static _GLIBCXX_CONSTEXPR long
1204  min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
1205 
1206  static _GLIBCXX_CONSTEXPR long
1207  max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
1208 
1209 #if __cplusplus >= 201103L
1210  static constexpr long
1211  lowest() noexcept { return min(); }
1212 #endif
1213 
1214  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
1215  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
1216 #if __cplusplus >= 201103L
1217  static constexpr int max_digits10 = 0;
1218 #endif
1219  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1220  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1221  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1222  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1223 
1224  static _GLIBCXX_CONSTEXPR long
1225  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1226 
1227  static _GLIBCXX_CONSTEXPR long
1228  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1229 
1230  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1231  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1232  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1233  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1234 
1235  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1236  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1237  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1238  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1239  = denorm_absent;
1240  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1241 
1242  static _GLIBCXX_CONSTEXPR long
1243  infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1244 
1245  static _GLIBCXX_CONSTEXPR long
1246  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1247 
1248  static _GLIBCXX_CONSTEXPR long
1249  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1250 
1251  static _GLIBCXX_CONSTEXPR long
1252  denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1253 
1254  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1255  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1256  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1257 
1258  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1259  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1260  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1261  = round_toward_zero;
1262  };
1263 
1264  /// numeric_limits<unsigned long> specialization.
1265  template<>
1266  struct numeric_limits<unsigned long>
1267  {
1268  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1269 
1270  static _GLIBCXX_CONSTEXPR unsigned long
1271  min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1272 
1273  static _GLIBCXX_CONSTEXPR unsigned long
1274  max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
1275 
1276 #if __cplusplus >= 201103L
1277  static constexpr unsigned long
1278  lowest() noexcept { return min(); }
1279 #endif
1280 
1281  static _GLIBCXX_USE_CONSTEXPR int digits
1282  = __glibcxx_digits (unsigned long);
1283  static _GLIBCXX_USE_CONSTEXPR int digits10
1284  = __glibcxx_digits10 (unsigned long);
1285 #if __cplusplus >= 201103L
1286  static constexpr int max_digits10 = 0;
1287 #endif
1288  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1289  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1290  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1291  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1292 
1293  static _GLIBCXX_CONSTEXPR unsigned long
1294  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1295 
1296  static _GLIBCXX_CONSTEXPR unsigned long
1297  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1298 
1299  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1300  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1301  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1302  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1303 
1304  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1305  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1306  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1307  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1308  = denorm_absent;
1309  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1310 
1311  static _GLIBCXX_CONSTEXPR unsigned long
1312  infinity() _GLIBCXX_USE_NOEXCEPT
1313  { return static_cast<unsigned long>(0); }
1314 
1315  static _GLIBCXX_CONSTEXPR unsigned long
1316  quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1317  { return static_cast<unsigned long>(0); }
1318 
1319  static _GLIBCXX_CONSTEXPR unsigned long
1320  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1321  { return static_cast<unsigned long>(0); }
1322 
1323  static _GLIBCXX_CONSTEXPR unsigned long
1324  denorm_min() _GLIBCXX_USE_NOEXCEPT
1325  { return static_cast<unsigned long>(0); }
1326 
1327  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1328  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1329  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1330 
1331  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1332  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1333  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1334  = round_toward_zero;
1335  };
1336 
1337  /// numeric_limits<long long> specialization.
1338  template<>
1339  struct numeric_limits<long long>
1340  {
1341  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1342 
1343  static _GLIBCXX_CONSTEXPR long long
1344  min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
1345 
1346  static _GLIBCXX_CONSTEXPR long long
1347  max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
1348 
1349 #if __cplusplus >= 201103L
1350  static constexpr long long
1351  lowest() noexcept { return min(); }
1352 #endif
1353 
1354  static _GLIBCXX_USE_CONSTEXPR int digits
1355  = __glibcxx_digits (long long);
1356  static _GLIBCXX_USE_CONSTEXPR int digits10
1357  = __glibcxx_digits10 (long long);
1358 #if __cplusplus >= 201103L
1359  static constexpr int max_digits10 = 0;
1360 #endif
1361  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1362  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1363  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1364  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1365 
1366  static _GLIBCXX_CONSTEXPR long long
1367  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1368 
1369  static _GLIBCXX_CONSTEXPR long long
1370  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1371 
1372  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1373  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1374  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1375  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1376 
1377  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1378  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1379  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1380  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1381  = denorm_absent;
1382  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1383 
1384  static _GLIBCXX_CONSTEXPR long long
1385  infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1386 
1387  static _GLIBCXX_CONSTEXPR long long
1388  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1389 
1390  static _GLIBCXX_CONSTEXPR long long
1391  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1392  { return static_cast<long long>(0); }
1393 
1394  static _GLIBCXX_CONSTEXPR long long
1395  denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1396 
1397  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1398  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1399  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1400 
1401  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1402  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1403  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1404  = round_toward_zero;
1405  };
1406 
1407  /// numeric_limits<unsigned long long> specialization.
1408  template<>
1409  struct numeric_limits<unsigned long long>
1410  {
1411  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1412 
1413  static _GLIBCXX_CONSTEXPR unsigned long long
1414  min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1415 
1416  static _GLIBCXX_CONSTEXPR unsigned long long
1417  max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
1418 
1419 #if __cplusplus >= 201103L
1420  static constexpr unsigned long long
1421  lowest() noexcept { return min(); }
1422 #endif
1423 
1424  static _GLIBCXX_USE_CONSTEXPR int digits
1425  = __glibcxx_digits (unsigned long long);
1426  static _GLIBCXX_USE_CONSTEXPR int digits10
1427  = __glibcxx_digits10 (unsigned long long);
1428 #if __cplusplus >= 201103L
1429  static constexpr int max_digits10 = 0;
1430 #endif
1431  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1432  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1433  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1434  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1435 
1436  static _GLIBCXX_CONSTEXPR unsigned long long
1437  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1438 
1439  static _GLIBCXX_CONSTEXPR unsigned long long
1440  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1441 
1442  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1443  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1444  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1445  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1446 
1447  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1448  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1449  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1450  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1451  = denorm_absent;
1452  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1453 
1454  static _GLIBCXX_CONSTEXPR unsigned long long
1455  infinity() _GLIBCXX_USE_NOEXCEPT
1456  { return static_cast<unsigned long long>(0); }
1457 
1458  static _GLIBCXX_CONSTEXPR unsigned long long
1459  quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1460  { return static_cast<unsigned long long>(0); }
1461 
1462  static _GLIBCXX_CONSTEXPR unsigned long long
1463  signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1464  { return static_cast<unsigned long long>(0); }
1465 
1466  static _GLIBCXX_CONSTEXPR unsigned long long
1467  denorm_min() _GLIBCXX_USE_NOEXCEPT
1468  { return static_cast<unsigned long long>(0); }
1469 
1470  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1471  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1472  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1473 
1474  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1475  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1476  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1477  = round_toward_zero;
1478  };
1479 
1480 #define __INT_N(TYPE, BITSIZE, EXT, UEXT) \
1481  __extension__ \
1482  template<> \
1483  struct numeric_limits<TYPE> \
1484  { \
1485  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \
1486  \
1487  static _GLIBCXX_CONSTEXPR TYPE \
1488  min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \
1489  \
1490  static _GLIBCXX_CONSTEXPR TYPE \
1491  max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \
1492  \
1493  static _GLIBCXX_USE_CONSTEXPR int digits \
1494  = BITSIZE - 1; \
1495  static _GLIBCXX_USE_CONSTEXPR int digits10 \
1496  = (BITSIZE - 1) * 643L / 2136; \
1497  \
1498  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; \
1499  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \
1500  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \
1501  static _GLIBCXX_USE_CONSTEXPR int radix = 2; \
1502  \
1503  static _GLIBCXX_CONSTEXPR TYPE \
1504  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \
1505  \
1506  static _GLIBCXX_CONSTEXPR TYPE \
1507  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \
1508  \
1509  EXT \
1510  \
1511  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \
1512  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \
1513  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \
1514  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \
1515  \
1516  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \
1517  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \
1518  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \
1519  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \
1520  = denorm_absent; \
1521  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \
1522  \
1523  static _GLIBCXX_CONSTEXPR TYPE \
1524  infinity() _GLIBCXX_USE_NOEXCEPT \
1525  { return static_cast<TYPE>(0); } \
1526  \
1527  static _GLIBCXX_CONSTEXPR TYPE \
1528  quiet_NaN() _GLIBCXX_USE_NOEXCEPT \
1529  { return static_cast<TYPE>(0); } \
1530  \
1531  static _GLIBCXX_CONSTEXPR TYPE \
1532  signaling_NaN() _GLIBCXX_USE_NOEXCEPT \
1533  { return static_cast<TYPE>(0); } \
1534  \
1535  static _GLIBCXX_CONSTEXPR TYPE \
1536  denorm_min() _GLIBCXX_USE_NOEXCEPT \
1537  { return static_cast<TYPE>(0); } \
1538  \
1539  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \
1540  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \
1541  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \
1542  \
1543  static _GLIBCXX_USE_CONSTEXPR bool traps \
1544  = __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  \
1550  __extension__ \
1551  template<> \
1552  struct numeric_limits<unsigned TYPE> \
1553  { \
1554  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \
1555  \
1556  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1557  min() _GLIBCXX_USE_NOEXCEPT { return 0; } \
1558  \
1559  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1560  max() _GLIBCXX_USE_NOEXCEPT \
1561  { return __glibcxx_max_b (unsigned TYPE, BITSIZE); } \
1562  \
1563  UEXT \
1564  \
1565  static _GLIBCXX_USE_CONSTEXPR int digits \
1566  = BITSIZE; \
1567  static _GLIBCXX_USE_CONSTEXPR int digits10 \
1568  = BITSIZE * 643L / 2136; \
1569  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; \
1570  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \
1571  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \
1572  static _GLIBCXX_USE_CONSTEXPR int radix = 2; \
1573  \
1574  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1575  epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \
1576  \
1577  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1578  round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \
1579  \
1580  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \
1581  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \
1582  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \
1583  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \
1584  \
1585  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \
1586  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \
1587  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \
1588  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \
1589  = denorm_absent; \
1590  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \
1591  \
1592  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1593  infinity() _GLIBCXX_USE_NOEXCEPT \
1594  { return static_cast<unsigned TYPE>(0); } \
1595  \
1596  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1597  quiet_NaN() _GLIBCXX_USE_NOEXCEPT \
1598  { return static_cast<unsigned TYPE>(0); } \
1599  \
1600  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1601  signaling_NaN() _GLIBCXX_USE_NOEXCEPT \
1602  { return static_cast<unsigned TYPE>(0); } \
1603  \
1604  static _GLIBCXX_CONSTEXPR unsigned TYPE \
1605  denorm_min() _GLIBCXX_USE_NOEXCEPT \
1606  { return static_cast<unsigned TYPE>(0); } \
1607  \
1608  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \
1609  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \
1610  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; \
1611  \
1612  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \
1613  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \
1614  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \
1615  = round_toward_zero; \
1616  };
1617 
1618 #if __cplusplus >= 201103L
1619 
1620 #define __INT_N_201103(TYPE) \
1621  static constexpr TYPE \
1622  lowest() noexcept { return min(); } \
1623  static constexpr int max_digits10 = 0;
1624 
1625 #define __INT_N_U201103(TYPE) \
1626  static constexpr unsigned TYPE \
1627  lowest() noexcept { return min(); } \
1628  static constexpr int max_digits10 = 0;
1629 
1630 #else
1631 #define __INT_N_201103(TYPE)
1632 #define __INT_N_U201103(TYPE)
1633 #endif
1634 
1635 #if !defined(__STRICT_ANSI__)
1636 #ifdef __GLIBCXX_TYPE_INT_N_0
1637  __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0,
1638  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0),
1639  __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0))
1640 #endif
1641 #ifdef __GLIBCXX_TYPE_INT_N_1
1642  __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1,
1643  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1),
1644  __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1))
1645 #endif
1646 #ifdef __GLIBCXX_TYPE_INT_N_2
1647  __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2,
1648  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2),
1649  __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2))
1650 #endif
1651 #ifdef __GLIBCXX_TYPE_INT_N_3
1652  __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3,
1653  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3),
1654  __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3))
1655 #endif
1656 
1657 #elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
1658  __INT_N(__int128, 128,
1659  __INT_N_201103 (__int128),
1660  __INT_N_U201103 (__int128))
1661 #endif
1662 
1663 #undef __INT_N
1664 #undef __INT_N_201103
1665 #undef __INT_N_U201103
1666 
1667 
1668  /// numeric_limits<float> specialization.
1669  template<>
1670  struct numeric_limits<float>
1671  {
1672  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1673 
1674  static _GLIBCXX_CONSTEXPR float
1675  min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
1676 
1677  static _GLIBCXX_CONSTEXPR float
1678  max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
1679 
1680 #if __cplusplus >= 201103L
1681  static constexpr float
1682  lowest() noexcept { return -__FLT_MAX__; }
1683 #endif
1684 
1685  static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
1686  static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
1687 #if __cplusplus >= 201103L
1688  static constexpr int max_digits10
1689  = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
1690 #endif
1691  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1692  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1693  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1694  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1695 
1696  static _GLIBCXX_CONSTEXPR float
1697  epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
1698 
1699  static _GLIBCXX_CONSTEXPR float
1700  round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
1701 
1702  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
1703  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
1704  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
1705  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
1706 
1707  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
1708  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
1709  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1710  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1711  = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
1712  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1713  = __glibcxx_float_has_denorm_loss;
1714 
1715  static _GLIBCXX_CONSTEXPR float
1716  infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
1717 
1718  static _GLIBCXX_CONSTEXPR float
1719  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
1720 
1721  static _GLIBCXX_CONSTEXPR float
1722  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
1723 
1724  static _GLIBCXX_CONSTEXPR float
1725  denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
1726 
1727  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1728  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1729  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1730  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1731 
1732  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
1733  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1734  = __glibcxx_float_tinyness_before;
1735  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1736  = round_to_nearest;
1737  };
1738 
1739 #undef __glibcxx_float_has_denorm_loss
1740 #undef __glibcxx_float_traps
1741 #undef __glibcxx_float_tinyness_before
1742 
1743  /// numeric_limits<double> specialization.
1744  template<>
1745  struct numeric_limits<double>
1746  {
1747  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1748 
1749  static _GLIBCXX_CONSTEXPR double
1750  min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
1751 
1752  static _GLIBCXX_CONSTEXPR double
1753  max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
1754 
1755 #if __cplusplus >= 201103L
1756  static constexpr double
1757  lowest() noexcept { return -__DBL_MAX__; }
1758 #endif
1759 
1760  static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
1761  static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
1762 #if __cplusplus >= 201103L
1763  static constexpr int max_digits10
1764  = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
1765 #endif
1766  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1767  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1768  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1769  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1770 
1771  static _GLIBCXX_CONSTEXPR double
1772  epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
1773 
1774  static _GLIBCXX_CONSTEXPR double
1775  round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
1776 
1777  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
1778  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
1779  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
1780  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
1781 
1782  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
1783  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
1784  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1785  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1786  = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1787  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1788  = __glibcxx_double_has_denorm_loss;
1789 
1790  static _GLIBCXX_CONSTEXPR double
1791  infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
1792 
1793  static _GLIBCXX_CONSTEXPR double
1794  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
1795 
1796  static _GLIBCXX_CONSTEXPR double
1797  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
1798 
1799  static _GLIBCXX_CONSTEXPR double
1800  denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
1801 
1802  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1803  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1804  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1805  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1806 
1807  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
1808  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1809  = __glibcxx_double_tinyness_before;
1810  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1811  = round_to_nearest;
1812  };
1813 
1814 #undef __glibcxx_double_has_denorm_loss
1815 #undef __glibcxx_double_traps
1816 #undef __glibcxx_double_tinyness_before
1817 
1818  /// numeric_limits<long double> specialization.
1819  template<>
1820  struct numeric_limits<long double>
1821  {
1822  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1823 
1824  static _GLIBCXX_CONSTEXPR long double
1825  min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
1826 
1827  static _GLIBCXX_CONSTEXPR long double
1828  max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
1829 
1830 #if __cplusplus >= 201103L
1831  static constexpr long double
1832  lowest() noexcept { return -__LDBL_MAX__; }
1833 #endif
1834 
1835  static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
1836  static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
1837 #if __cplusplus >= 201103L
1838  static _GLIBCXX_USE_CONSTEXPR int max_digits10
1839  = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
1840 #endif
1841  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1842  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1843  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1844  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1845 
1846  static _GLIBCXX_CONSTEXPR long double
1847  epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
1848 
1849  static _GLIBCXX_CONSTEXPR long double
1850  round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
1851 
1852  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
1853  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
1854  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
1855  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
1856 
1857  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
1858  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
1859  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1860  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1861  = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1862  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1863  = __glibcxx_long_double_has_denorm_loss;
1864 
1865  static _GLIBCXX_CONSTEXPR long double
1866  infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
1867 
1868  static _GLIBCXX_CONSTEXPR long double
1869  quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
1870 
1871  static _GLIBCXX_CONSTEXPR long double
1872  signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
1873 
1874  static _GLIBCXX_CONSTEXPR long double
1875  denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
1876 
1877  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1878  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1879  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1880  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1881 
1882  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
1883  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
1884  __glibcxx_long_double_tinyness_before;
1885  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
1886  round_to_nearest;
1887  };
1888 
1889 #undef __glibcxx_long_double_has_denorm_loss
1890 #undef __glibcxx_long_double_traps
1891 #undef __glibcxx_long_double_tinyness_before
1892 
1893 _GLIBCXX_END_NAMESPACE_VERSION
1894 } // namespace
1895 
1896 #undef __glibcxx_signed
1897 #undef __glibcxx_min
1898 #undef __glibcxx_max
1899 #undef __glibcxx_digits
1900 #undef __glibcxx_digits10
1901 #undef __glibcxx_max_digits10
1902 
1903 #endif // _GLIBCXX_NUMERIC_LIMITS