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, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
4 // 2008, 2009, 2010 Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
10 // any later version.
11 
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 
17 // Under Section 7 of GPL version 3, you are granted additional
18 // permissions described in the GCC Runtime Library Exception, version
19 // 3.1, as published by the Free Software Foundation.
20 
21 // You should have received a copy of the GNU General Public License and
22 // a copy of the GCC Runtime Library Exception along with this program;
23 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 // <http://www.gnu.org/licenses/>.
25 
26 /** @file include/limits
27  * This is a Standard C++ Library header.
28  */
29 
30 // Note: this is not a conforming implementation.
31 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
32 
33 //
34 // ISO 14882:1998
35 // 18.2.1
36 //
37 
38 #ifndef _GLIBCXX_NUMERIC_LIMITS
39 #define _GLIBCXX_NUMERIC_LIMITS 1
40 
41 #pragma GCC system_header
42 
43 #include <bits/c++config.h>
44 
45 //
46 // The numeric_limits<> traits document implementation-defined aspects
47 // of fundamental arithmetic data types (integers and floating points).
48 // From Standard C++ point of view, there are 14 such types:
49 // * integers
50 // bool (1)
51 // char, signed char, unsigned char, wchar_t (4)
52 // short, unsigned short (2)
53 // int, unsigned (2)
54 // long, unsigned long (2)
55 //
56 // * floating points
57 // float (1)
58 // double (1)
59 // long double (1)
60 //
61 // GNU C++ understands (where supported by the host C-library)
62 // * integer
63 // long long, unsigned long long (2)
64 //
65 // which brings us to 16 fundamental arithmetic data types in GNU C++.
66 //
67 //
68 // Since a numeric_limits<> is a bit tricky to get right, we rely on
69 // an interface composed of macros which should be defined in config/os
70 // or config/cpu when they differ from the generic (read arbitrary)
71 // definitions given here.
72 //
73 
74 // These values can be overridden in the target configuration file.
75 // The default values are appropriate for many 32-bit targets.
76 
77 // GCC only intrinsically supports modulo integral types. The only remaining
78 // integral exceptional values is division by zero. Only targets that do not
79 // signal division by zero in some "hard to ignore" way should use false.
80 #ifndef __glibcxx_integral_traps
81 # define __glibcxx_integral_traps true
82 #endif
83 
84 // float
85 //
86 
87 // Default values. Should be overridden in configuration files if necessary.
88 
89 #ifndef __glibcxx_float_has_denorm_loss
90 # define __glibcxx_float_has_denorm_loss false
91 #endif
92 #ifndef __glibcxx_float_traps
93 # define __glibcxx_float_traps false
94 #endif
95 #ifndef __glibcxx_float_tinyness_before
96 # define __glibcxx_float_tinyness_before false
97 #endif
98 
99 // double
100 
101 // Default values. Should be overridden in configuration files if necessary.
102 
103 #ifndef __glibcxx_double_has_denorm_loss
104 # define __glibcxx_double_has_denorm_loss false
105 #endif
106 #ifndef __glibcxx_double_traps
107 # define __glibcxx_double_traps false
108 #endif
109 #ifndef __glibcxx_double_tinyness_before
110 # define __glibcxx_double_tinyness_before false
111 #endif
112 
113 // long double
114 
115 // Default values. Should be overridden in configuration files if necessary.
116 
117 #ifndef __glibcxx_long_double_has_denorm_loss
118 # define __glibcxx_long_double_has_denorm_loss false
119 #endif
120 #ifndef __glibcxx_long_double_traps
121 # define __glibcxx_long_double_traps false
122 #endif
123 #ifndef __glibcxx_long_double_tinyness_before
124 # define __glibcxx_long_double_tinyness_before false
125 #endif
126 
127 // You should not need to define any macros below this point.
128 
129 #define __glibcxx_signed(T) ((T)(-1) < 0)
130 
131 #define __glibcxx_min(T) \
132  (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0)
133 
134 #define __glibcxx_max(T) \
135  (__glibcxx_signed (T) ? \
136  (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
137 
138 #define __glibcxx_digits(T) \
139  (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
140 
141 // The fraction 643/2136 approximates log10(2) to 7 significant digits.
142 #define __glibcxx_digits10(T) \
143  (__glibcxx_digits (T) * 643L / 2136)
144 
145 #define __glibcxx_max_digits10(T) \
146  (2 + (T) * 643L / 2136)
147 
148 namespace std _GLIBCXX_VISIBILITY(default)
149 {
150 _GLIBCXX_BEGIN_NAMESPACE_VERSION
151 
152  /**
153  * @brief Describes the rounding style for floating-point types.
154  *
155  * This is used in the std::numeric_limits class.
156  */
158  {
159  round_indeterminate = -1, /// Intermediate.
160  round_toward_zero = 0, /// To zero.
161  round_to_nearest = 1, /// To the nearest representable value.
162  round_toward_infinity = 2, /// To infinity.
163  round_toward_neg_infinity = 3 /// To negative infinity.
164  };
165 
166  /**
167  * @brief Describes the denormalization for floating-point types.
168  *
169  * These values represent the presence or absence of a variable number
170  * of exponent bits. This type is used in the std::numeric_limits class.
171  */
173  {
174  /// Indeterminate at compile time whether denormalized values are allowed.
176  /// The type does not allow denormalized values.
178  /// The type allows denormalized values.
180  };
181 
182  /**
183  * @brief Part of std::numeric_limits.
184  *
185  * The @c static @c const members are usable as integral constant
186  * expressions.
187  *
188  * @note This is a separate class for purposes of efficiency; you
189  * should only access these members as part of an instantiation
190  * of the std::numeric_limits class.
191  */
193  {
194  /** This will be true for all fundamental types (which have
195  specializations), and false for everything else. */
196  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
197 
198  /** The number of @c radix digits that be represented without change: for
199  integer types, the number of non-sign bits in the mantissa; for
200  floating types, the number of @c radix digits in the mantissa. */
201  static _GLIBCXX_USE_CONSTEXPR int digits = 0;
202 
203  /** The number of base 10 digits that can be represented without change. */
204  static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
205 
206 #ifdef __GXX_EXPERIMENTAL_CXX0X__
207  /** The number of base 10 digits required to ensure that values which
208  differ are always differentiated. */
209  static constexpr int max_digits10 = 0;
210 #endif
211 
212  /** True if the type is signed. */
213  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
214 
215  /** True if the type is integer.
216  * Is this supposed to be <em>if the type is integral?</em> */
217  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
218 
219  /** True if the type uses an exact representation. <em>All integer types are
220  exact, but not all exact types are integer. For example, rational and
221  fixed-exponent representations are exact but not integer.</em>
222  [18.2.1.2]/15 */
223  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
224 
225  /** For integer types, specifies the base of the representation. For
226  floating types, specifies the base of the exponent representation. */
227  static _GLIBCXX_USE_CONSTEXPR int radix = 0;
228 
229  /** The minimum negative integer such that @c radix raised to the power of
230  (one less than that integer) is a normalized floating point number. */
231  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
232 
233  /** The minimum negative integer such that 10 raised to that power is in
234  the range of normalized floating point numbers. */
235  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
236 
237  /** The maximum positive integer such that @c radix raised to the power of
238  (one less than that integer) is a representable finite floating point
239  number. */
240  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
241 
242  /** The maximum positive integer such that 10 raised to that power is in
243  the range of representable finite floating point numbers. */
244  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
245 
246  /** True if the type has a representation for positive infinity. */
247  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
248 
249  /** True if the type has a representation for a quiet (non-signaling)
250  <em>Not a Number</em>. */
251  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
252 
253  /** True if the type has a representation for a signaling
254  <em>Not a Number</em>. */
255  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
256 
257  /** See std::float_denorm_style for more information. */
258  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
259 
260  /** <em>True if loss of accuracy is detected as a denormalization loss,
261  rather than as an inexact result.</em> [18.2.1.2]/42 */
262  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
263 
264  /** True if-and-only-if the type adheres to the IEC 559 standard, also
265  known as IEEE 754. (Only makes sense for floating point types.) */
266  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
267 
268  /** <em>True if the set of values representable by the type is
269  finite. All built-in types are bounded, this member would be
270  false for arbitrary precision types.</em> [18.2.1.2]/54 */
271  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
272 
273  /** True if the type is @e modulo, that is, if it is possible to add two
274  positive numbers and have a result that wraps around to a third number
275  that is less. Typically false for floating types, true for unsigned
276  integers, and true for signed integers. */
277  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
278 
279  /** True if trapping is implemented for this type. */
280  static _GLIBCXX_USE_CONSTEXPR bool traps = false;
281 
282  /** True if tininess is detected before rounding. (see IEC 559) */
283  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
284 
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 =
290  };
291 
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>
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() throw() { return static_cast<_Tp>(0); }
310 
311  /** The maximum finite value. */
312  static _GLIBCXX_CONSTEXPR _Tp
313  max() throw() { return static_cast<_Tp>(0); }
314 
315 #ifdef __GXX_EXPERIMENTAL_CXX0X__
316  /** A finite value x such that there is no other finite value y
317  * where y < x. */
318  static constexpr _Tp
319  lowest() throw() { return static_cast<_Tp>(0); }
320 #endif
321 
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() throw() { return static_cast<_Tp>(0); }
326 
327  /** The maximum rounding error measurement (see LIA-1). */
328  static _GLIBCXX_CONSTEXPR _Tp
329  round_error() throw() { return static_cast<_Tp>(0); }
330 
331  /** The representation of positive infinity, if @c has_infinity. */
332  static _GLIBCXX_CONSTEXPR _Tp
333  infinity() throw() { return static_cast<_Tp>(0); }
334 
335  /** The representation of a quiet <em>Not a Number</em>,
336  if @c has_quiet_NaN. */
337  static _GLIBCXX_CONSTEXPR _Tp
338  quiet_NaN() throw() { return static_cast<_Tp>(0); }
339 
340  /** The representation of a signaling <em>Not a Number</em>, if
341  @c has_signaling_NaN. */
342  static _GLIBCXX_CONSTEXPR _Tp
343  signaling_NaN() throw() { return static_cast<_Tp>(0); }
344 
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() throw() { return static_cast<_Tp>(0); }
350  };
351 
352 #ifdef __GXX_EXPERIMENTAL_CXX0X__
353  template<typename _Tp>
354  struct numeric_limits<const _Tp>
355  : public numeric_limits<_Tp> { };
356 
357  template<typename _Tp>
358  struct numeric_limits<volatile _Tp>
359  : public numeric_limits<_Tp> { };
360 
361  template<typename _Tp>
362  struct numeric_limits<const volatile _Tp>
363  : public numeric_limits<_Tp> { };
364 #endif
365 
366  // Now there follow 16 explicit specializations. Yes, 16. Make sure
367  // you get the count right. (18 in c++0x mode)
368 
369  /// numeric_limits<bool> specialization.
370  template<>
371  struct numeric_limits<bool>
372  {
373  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
374 
375  static _GLIBCXX_CONSTEXPR bool
376  min() throw() { return false; }
377 
378  static _GLIBCXX_CONSTEXPR bool
379  max() throw() { return true; }
380 
381 #ifdef __GXX_EXPERIMENTAL_CXX0X__
382  static constexpr bool
383  lowest() throw() { return min(); }
384 #endif
385  static _GLIBCXX_USE_CONSTEXPR int digits = 1;
386  static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
387 #ifdef __GXX_EXPERIMENTAL_CXX0X__
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;
394 
395  static _GLIBCXX_CONSTEXPR bool
396  epsilon() throw() { return false; }
397 
398  static _GLIBCXX_CONSTEXPR bool
399  round_error() throw() { return false; }
400 
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;
405 
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;
412 
413  static _GLIBCXX_CONSTEXPR bool
414  infinity() throw() { return false; }
415 
416  static _GLIBCXX_CONSTEXPR bool
417  quiet_NaN() throw() { return false; }
418 
419  static _GLIBCXX_CONSTEXPR bool
420  signaling_NaN() throw() { return false; }
421 
422  static _GLIBCXX_CONSTEXPR bool
423  denorm_min() throw() { return false; }
424 
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;
428 
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
436  };
437 
438  /// numeric_limits<char> specialization.
439  template<>
440  struct numeric_limits<char>
441  {
442  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
443 
444  static _GLIBCXX_CONSTEXPR char
445  min() throw() { return __glibcxx_min(char); }
446 
447  static _GLIBCXX_CONSTEXPR char
448  max() throw() { return __glibcxx_max(char); }
449 
450 #ifdef __GXX_EXPERIMENTAL_CXX0X__
451  static constexpr char
452  lowest() throw() { return min(); }
453 #endif
454 
455  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
456  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
457 #ifdef __GXX_EXPERIMENTAL_CXX0X__
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;
464 
465  static _GLIBCXX_CONSTEXPR char
466  epsilon() throw() { return 0; }
467 
468  static _GLIBCXX_CONSTEXPR char
469  round_error() throw() { return 0; }
470 
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;
475 
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;
482 
483  static _GLIBCXX_CONSTEXPR
484  char infinity() throw() { return char(); }
485 
486  static _GLIBCXX_CONSTEXPR char
487  quiet_NaN() throw() { return char(); }
488 
489  static _GLIBCXX_CONSTEXPR char
490  signaling_NaN() throw() { return char(); }
491 
492  static _GLIBCXX_CONSTEXPR char
493  denorm_min() throw() { return static_cast<char>(0); }
494 
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 = true;
498 
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
503  };
504 
505  /// numeric_limits<signed char> specialization.
506  template<>
507  struct numeric_limits<signed char>
508  {
509  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
510 
511  static _GLIBCXX_CONSTEXPR signed char
512  min() throw() { return -__SCHAR_MAX__ - 1; }
513 
514  static _GLIBCXX_CONSTEXPR signed char
515  max() throw() { return __SCHAR_MAX__; }
516 
517 #ifdef __GXX_EXPERIMENTAL_CXX0X__
518  static constexpr signed char
519  lowest() throw() { return min(); }
520 #endif
521 
522  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
523  static _GLIBCXX_USE_CONSTEXPR int digits10
524  = __glibcxx_digits10 (signed char);
525 #ifdef __GXX_EXPERIMENTAL_CXX0X__
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;
532 
533  static _GLIBCXX_CONSTEXPR signed char
534  epsilon() throw() { return 0; }
535 
536  static _GLIBCXX_CONSTEXPR signed char
537  round_error() throw() { return 0; }
538 
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;
543 
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;
550 
551  static _GLIBCXX_CONSTEXPR signed char
552  infinity() throw() { return static_cast<signed char>(0); }
553 
554  static _GLIBCXX_CONSTEXPR signed char
555  quiet_NaN() throw() { return static_cast<signed char>(0); }
556 
557  static _GLIBCXX_CONSTEXPR signed char
558  signaling_NaN() throw() { return static_cast<signed char>(0); }
559 
560  static _GLIBCXX_CONSTEXPR signed char
561  denorm_min() throw() { return static_cast<signed char>(0); }
562 
563  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
564  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
565  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
566 
567  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
568  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
569  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
571  };
572 
573  /// numeric_limits<unsigned char> specialization.
574  template<>
575  struct numeric_limits<unsigned char>
576  {
577  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
578 
579  static _GLIBCXX_CONSTEXPR unsigned char
580  min() throw() { return 0; }
581 
582  static _GLIBCXX_CONSTEXPR unsigned char
583  max() throw() { return __SCHAR_MAX__ * 2U + 1; }
584 
585 #ifdef __GXX_EXPERIMENTAL_CXX0X__
586  static constexpr unsigned char
587  lowest() throw() { return min(); }
588 #endif
589 
590  static _GLIBCXX_USE_CONSTEXPR int digits
591  = __glibcxx_digits (unsigned char);
592  static _GLIBCXX_USE_CONSTEXPR int digits10
593  = __glibcxx_digits10 (unsigned char);
594 #ifdef __GXX_EXPERIMENTAL_CXX0X__
595  static constexpr int max_digits10 = 0;
596 #endif
597  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
598  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
599  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
600  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
601 
602  static _GLIBCXX_CONSTEXPR unsigned char
603  epsilon() throw() { return 0; }
604 
605  static _GLIBCXX_CONSTEXPR unsigned char
606  round_error() throw() { return 0; }
607 
608  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
609  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
610  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
611  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
612 
613  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
614  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
615  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
616  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
617  = denorm_absent;
618  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
619 
620  static _GLIBCXX_CONSTEXPR unsigned char
621  infinity() throw() { return static_cast<unsigned char>(0); }
622 
623  static _GLIBCXX_CONSTEXPR unsigned char
624  quiet_NaN() throw() { return static_cast<unsigned char>(0); }
625 
626  static _GLIBCXX_CONSTEXPR unsigned char
627  signaling_NaN() throw() { return static_cast<unsigned char>(0); }
628 
629  static _GLIBCXX_CONSTEXPR unsigned char
630  denorm_min() throw() { return static_cast<unsigned char>(0); }
631 
632  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
633  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
634  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
635 
636  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
637  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
638  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
640  };
641 
642  /// numeric_limits<wchar_t> specialization.
643  template<>
644  struct numeric_limits<wchar_t>
645  {
646  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
647 
648  static _GLIBCXX_CONSTEXPR wchar_t
649  min() throw() { return __glibcxx_min (wchar_t); }
650 
651  static _GLIBCXX_CONSTEXPR wchar_t
652  max() throw() { return __glibcxx_max (wchar_t); }
653 
654 #ifdef __GXX_EXPERIMENTAL_CXX0X__
655  static constexpr wchar_t
656  lowest() throw() { return min(); }
657 #endif
658 
659  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
660  static _GLIBCXX_USE_CONSTEXPR int digits10
661  = __glibcxx_digits10 (wchar_t);
662 #ifdef __GXX_EXPERIMENTAL_CXX0X__
663  static constexpr int max_digits10 = 0;
664 #endif
665  static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
666  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
667  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
668  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
669 
670  static _GLIBCXX_CONSTEXPR wchar_t
671  epsilon() throw() { return 0; }
672 
673  static _GLIBCXX_CONSTEXPR wchar_t
674  round_error() throw() { return 0; }
675 
676  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
677  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
678  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
679  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
680 
681  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
682  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
683  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
684  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
685  = denorm_absent;
686  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
687 
688  static _GLIBCXX_CONSTEXPR wchar_t
689  infinity() throw() { return wchar_t(); }
690 
691  static _GLIBCXX_CONSTEXPR wchar_t
692  quiet_NaN() throw() { return wchar_t(); }
693 
694  static _GLIBCXX_CONSTEXPR wchar_t
695  signaling_NaN() throw() { return wchar_t(); }
696 
697  static _GLIBCXX_CONSTEXPR wchar_t
698  denorm_min() throw() { return wchar_t(); }
699 
700  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
701  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
702  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
703 
704  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
705  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
706  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
708  };
709 
710 #ifdef __GXX_EXPERIMENTAL_CXX0X__
711  /// numeric_limits<char16_t> specialization.
712  template<>
713  struct numeric_limits<char16_t>
714  {
715  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
716 
717  static _GLIBCXX_CONSTEXPR char16_t
718  min() throw() { return __glibcxx_min (char16_t); }
719 
720  static _GLIBCXX_CONSTEXPR char16_t
721  max() throw() { return __glibcxx_max (char16_t); }
722 
723 #ifdef __GXX_EXPERIMENTAL_CXX0X__
724  static constexpr char16_t
725  lowest() throw() { return min(); }
726 #endif
727 
728  static _GLIBCXX_USE_CONSTEXPR int digits
729  = __glibcxx_digits (char16_t);
730  static _GLIBCXX_USE_CONSTEXPR int digits10
731  = __glibcxx_digits10 (char16_t);
732 #ifdef __GXX_EXPERIMENTAL_CXX0X__
733  static constexpr int max_digits10 = 0;
734 #endif
735  static _GLIBCXX_USE_CONSTEXPR bool is_signed
736  = __glibcxx_signed (char16_t);
737  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
738  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
739  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
740 
741  static _GLIBCXX_CONSTEXPR char16_t
742  epsilon() throw() { return 0; }
743 
744  static _GLIBCXX_CONSTEXPR char16_t
745  round_error() throw() { return 0; }
746 
747  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
748  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
749  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
750  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
751 
752  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
753  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
754  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
755  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
756  = denorm_absent;
757  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
758 
759  static _GLIBCXX_CONSTEXPR char16_t
760  infinity() throw() { return char16_t(); }
761 
762  static _GLIBCXX_CONSTEXPR char16_t
763  quiet_NaN() throw() { return char16_t(); }
764 
765  static _GLIBCXX_CONSTEXPR char16_t
766  signaling_NaN() throw() { return char16_t(); }
767 
768  static _GLIBCXX_CONSTEXPR char16_t
769  denorm_min() throw() { return char16_t(); }
770 
771  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
772  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
773  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
774 
775  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
776  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
777  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
779  };
780 
781  /// numeric_limits<char32_t> specialization.
782  template<>
783  struct numeric_limits<char32_t>
784  {
785  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
786 
787  static _GLIBCXX_CONSTEXPR char32_t
788  min() throw() { return __glibcxx_min (char32_t); }
789 
790  static _GLIBCXX_CONSTEXPR char32_t
791  max() throw() { return __glibcxx_max (char32_t); }
792 
793 #ifdef __GXX_EXPERIMENTAL_CXX0X__
794  static constexpr char32_t
795  lowest() throw() { return min(); }
796 #endif
797 
798  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char32_t);
799  static _GLIBCXX_USE_CONSTEXPR int digits10
800  = __glibcxx_digits10 (char32_t);
801 #ifdef __GXX_EXPERIMENTAL_CXX0X__
802  static constexpr int max_digits10 = 0;
803 #endif
804  static _GLIBCXX_USE_CONSTEXPR bool is_signed
805  = __glibcxx_signed (char32_t);
806  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
807  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
808  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
809 
810  static _GLIBCXX_CONSTEXPR char32_t
811  epsilon() throw() { return 0; }
812 
813  static _GLIBCXX_CONSTEXPR char32_t
814  round_error() throw() { return 0; }
815 
816  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
817  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
818  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
819  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
820 
821  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
822  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
823  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
824  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
825  = denorm_absent;
826  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
827 
828  static _GLIBCXX_CONSTEXPR char32_t
829  infinity() throw() { return char32_t(); }
830 
831  static _GLIBCXX_CONSTEXPR char32_t
832  quiet_NaN() throw() { return char32_t(); }
833 
834  static _GLIBCXX_CONSTEXPR char32_t
835  signaling_NaN() throw() { return char32_t(); }
836 
837  static _GLIBCXX_CONSTEXPR char32_t
838  denorm_min() throw() { return char32_t(); }
839 
840  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
841  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
842  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
843 
844  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
845  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
846  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
848  };
849 #endif
850 
851  /// numeric_limits<short> specialization.
852  template<>
853  struct numeric_limits<short>
854  {
855  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
856 
857  static _GLIBCXX_CONSTEXPR short
858  min() throw() { return -__SHRT_MAX__ - 1; }
859 
860  static _GLIBCXX_CONSTEXPR short
861  max() throw() { return __SHRT_MAX__; }
862 
863 #ifdef __GXX_EXPERIMENTAL_CXX0X__
864  static constexpr short
865  lowest() throw() { return min(); }
866 #endif
867 
868  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
869  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
870 #ifdef __GXX_EXPERIMENTAL_CXX0X__
871  static constexpr int max_digits10 = 0;
872 #endif
873  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
874  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
875  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
876  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
877 
878  static _GLIBCXX_CONSTEXPR short
879  epsilon() throw() { return 0; }
880 
881  static _GLIBCXX_CONSTEXPR short
882  round_error() throw() { return 0; }
883 
884  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
885  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
886  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
887  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
888 
889  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
890  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
891  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
892  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
893  = denorm_absent;
894  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
895 
896  static _GLIBCXX_CONSTEXPR short
897  infinity() throw() { return short(); }
898 
899  static _GLIBCXX_CONSTEXPR short
900  quiet_NaN() throw() { return short(); }
901 
902  static _GLIBCXX_CONSTEXPR short
903  signaling_NaN() throw() { return short(); }
904 
905  static _GLIBCXX_CONSTEXPR short
906  denorm_min() throw() { return short(); }
907 
908  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
909  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
910  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
911 
912  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
913  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
914  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
916  };
917 
918  /// numeric_limits<unsigned short> specialization.
919  template<>
920  struct numeric_limits<unsigned short>
921  {
922  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
923 
924  static _GLIBCXX_CONSTEXPR unsigned short
925  min() throw() { return 0; }
926 
927  static _GLIBCXX_CONSTEXPR unsigned short
928  max() throw() { return __SHRT_MAX__ * 2U + 1; }
929 
930 #ifdef __GXX_EXPERIMENTAL_CXX0X__
931  static constexpr unsigned short
932  lowest() throw() { return min(); }
933 #endif
934 
935  static _GLIBCXX_USE_CONSTEXPR int digits
936  = __glibcxx_digits (unsigned short);
937  static _GLIBCXX_USE_CONSTEXPR int digits10
938  = __glibcxx_digits10 (unsigned short);
939 #ifdef __GXX_EXPERIMENTAL_CXX0X__
940  static constexpr int max_digits10 = 0;
941 #endif
942  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
943  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
944  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
945  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
946 
947  static _GLIBCXX_CONSTEXPR unsigned short
948  epsilon() throw() { return 0; }
949 
950  static _GLIBCXX_CONSTEXPR unsigned short
951  round_error() throw() { return 0; }
952 
953  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
954  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
955  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
956  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
957 
958  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
959  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
960  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
961  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
962  = denorm_absent;
963  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
964 
965  static _GLIBCXX_CONSTEXPR unsigned short
966  infinity() throw() { return static_cast<unsigned short>(0); }
967 
968  static _GLIBCXX_CONSTEXPR unsigned short
969  quiet_NaN() throw() { return static_cast<unsigned short>(0); }
970 
971  static _GLIBCXX_CONSTEXPR unsigned short
972  signaling_NaN() throw() { return static_cast<unsigned short>(0); }
973 
974  static _GLIBCXX_CONSTEXPR unsigned short
975  denorm_min() throw() { return static_cast<unsigned short>(0); }
976 
977  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
978  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
979  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
980 
981  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
982  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
983  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
985  };
986 
987  /// numeric_limits<int> specialization.
988  template<>
989  struct numeric_limits<int>
990  {
991  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
992 
993  static _GLIBCXX_CONSTEXPR int
994  min() throw() { return -__INT_MAX__ - 1; }
995 
996  static _GLIBCXX_CONSTEXPR int
997  max() throw() { return __INT_MAX__; }
998 
999 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1000  static constexpr int
1001  lowest() throw() { return min(); }
1002 #endif
1003 
1004  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
1005  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
1006 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1007  static constexpr int max_digits10 = 0;
1008 #endif
1009  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
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 int
1015  epsilon() throw() { return 0; }
1016 
1017  static _GLIBCXX_CONSTEXPR int
1018  round_error() throw() { 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 int
1033  infinity() throw() { return static_cast<int>(0); }
1034 
1035  static _GLIBCXX_CONSTEXPR int
1036  quiet_NaN() throw() { return static_cast<int>(0); }
1037 
1038  static _GLIBCXX_CONSTEXPR int
1039  signaling_NaN() throw() { return static_cast<int>(0); }
1040 
1041  static _GLIBCXX_CONSTEXPR int
1042  denorm_min() throw() { return static_cast<int>(0); }
1043 
1044  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1045  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1046  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1047 
1048  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1049  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1050  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1052  };
1053 
1054  /// numeric_limits<unsigned int> specialization.
1055  template<>
1056  struct numeric_limits<unsigned int>
1057  {
1058  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1059 
1060  static _GLIBCXX_CONSTEXPR unsigned int
1061  min() throw() { return 0; }
1062 
1063  static _GLIBCXX_CONSTEXPR unsigned int
1064  max() throw() { return __INT_MAX__ * 2U + 1; }
1065 
1066 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1067  static constexpr unsigned int
1068  lowest() throw() { return min(); }
1069 #endif
1070 
1071  static _GLIBCXX_USE_CONSTEXPR int digits
1072  = __glibcxx_digits (unsigned int);
1073  static _GLIBCXX_USE_CONSTEXPR int digits10
1074  = __glibcxx_digits10 (unsigned int);
1075 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1076  static constexpr int max_digits10 = 0;
1077 #endif
1078  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1079  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1080  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1081  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1082 
1083  static _GLIBCXX_CONSTEXPR unsigned int
1084  epsilon() throw() { return 0; }
1085 
1086  static _GLIBCXX_CONSTEXPR unsigned int
1087  round_error() throw() { return 0; }
1088 
1089  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1090  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1091  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1092  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1093 
1094  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1095  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1096  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1097  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1098  = denorm_absent;
1099  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1100 
1101  static _GLIBCXX_CONSTEXPR unsigned int
1102  infinity() throw() { return static_cast<unsigned int>(0); }
1103 
1104  static _GLIBCXX_CONSTEXPR unsigned int
1105  quiet_NaN() throw() { return static_cast<unsigned int>(0); }
1106 
1107  static _GLIBCXX_CONSTEXPR unsigned int
1108  signaling_NaN() throw() { return static_cast<unsigned int>(0); }
1109 
1110  static _GLIBCXX_CONSTEXPR unsigned int
1111  denorm_min() throw() { return static_cast<unsigned int>(0); }
1112 
1113  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1114  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1115  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1116 
1117  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1118  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1119  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1121  };
1122 
1123  /// numeric_limits<long> specialization.
1124  template<>
1125  struct numeric_limits<long>
1126  {
1127  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1128 
1129  static _GLIBCXX_CONSTEXPR long
1130  min() throw() { return -__LONG_MAX__ - 1; }
1131 
1132  static _GLIBCXX_CONSTEXPR long
1133  max() throw() { return __LONG_MAX__; }
1134 
1135 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1136  static constexpr long
1137  lowest() throw() { return min(); }
1138 #endif
1139 
1140  static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
1141  static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
1142 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1143  static constexpr int max_digits10 = 0;
1144 #endif
1145  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1146  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1147  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1148  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1149 
1150  static _GLIBCXX_CONSTEXPR long
1151  epsilon() throw() { return 0; }
1152 
1153  static _GLIBCXX_CONSTEXPR long
1154  round_error() throw() { return 0; }
1155 
1156  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1157  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1158  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1159  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1160 
1161  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1162  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1163  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1164  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1165  = denorm_absent;
1166  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1167 
1168  static _GLIBCXX_CONSTEXPR long
1169  infinity() throw() { return static_cast<long>(0); }
1170 
1171  static _GLIBCXX_CONSTEXPR long
1172  quiet_NaN() throw() { return static_cast<long>(0); }
1173 
1174  static _GLIBCXX_CONSTEXPR long
1175  signaling_NaN() throw() { return static_cast<long>(0); }
1176 
1177  static _GLIBCXX_CONSTEXPR long
1178  denorm_min() throw() { return static_cast<long>(0); }
1179 
1180  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1181  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1182  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1183 
1184  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1185  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1186  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1188  };
1189 
1190  /// numeric_limits<unsigned long> specialization.
1191  template<>
1192  struct numeric_limits<unsigned long>
1193  {
1194  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1195 
1196  static _GLIBCXX_CONSTEXPR unsigned long
1197  min() throw() { return 0; }
1198 
1199  static _GLIBCXX_CONSTEXPR unsigned long
1200  max() throw() { return __LONG_MAX__ * 2UL + 1; }
1201 
1202 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1203  static constexpr unsigned long
1204  lowest() throw() { return min(); }
1205 #endif
1206 
1207  static _GLIBCXX_USE_CONSTEXPR int digits
1208  = __glibcxx_digits (unsigned long);
1209  static _GLIBCXX_USE_CONSTEXPR int digits10
1210  = __glibcxx_digits10 (unsigned long);
1211 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1212  static constexpr int max_digits10 = 0;
1213 #endif
1214  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1215  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1216  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1217  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1218 
1219  static _GLIBCXX_CONSTEXPR unsigned long
1220  epsilon() throw() { return 0; }
1221 
1222  static _GLIBCXX_CONSTEXPR unsigned long
1223  round_error() throw() { return 0; }
1224 
1225  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1226  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1227  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1228  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1229 
1230  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1231  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1232  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1233  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1234  = denorm_absent;
1235  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1236 
1237  static _GLIBCXX_CONSTEXPR unsigned long
1238  infinity() throw() { return static_cast<unsigned long>(0); }
1239 
1240  static _GLIBCXX_CONSTEXPR unsigned long
1241  quiet_NaN() throw() { return static_cast<unsigned long>(0); }
1242 
1243  static _GLIBCXX_CONSTEXPR unsigned long
1244  signaling_NaN() throw() { return static_cast<unsigned long>(0); }
1245 
1246  static _GLIBCXX_CONSTEXPR unsigned long
1247  denorm_min() throw() { return static_cast<unsigned long>(0); }
1248 
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;
1252 
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
1257  };
1258 
1259  /// numeric_limits<long long> specialization.
1260  template<>
1261  struct numeric_limits<long long>
1262  {
1263  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1264 
1265  static _GLIBCXX_CONSTEXPR long long
1266  min() throw() { return -__LONG_LONG_MAX__ - 1; }
1267 
1268  static _GLIBCXX_CONSTEXPR long long
1269  max() throw() { return __LONG_LONG_MAX__; }
1270 
1271 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1272  static constexpr long long
1273  lowest() throw() { return min(); }
1274 #endif
1275 
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 #ifdef __GXX_EXPERIMENTAL_CXX0X__
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;
1287 
1288  static _GLIBCXX_CONSTEXPR long long
1289  epsilon() throw() { return 0; }
1290 
1291  static _GLIBCXX_CONSTEXPR long long
1292  round_error() throw() { return 0; }
1293 
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;
1298 
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;
1305 
1306  static _GLIBCXX_CONSTEXPR long long
1307  infinity() throw() { return static_cast<long long>(0); }
1308 
1309  static _GLIBCXX_CONSTEXPR long long
1310  quiet_NaN() throw() { return static_cast<long long>(0); }
1311 
1312  static _GLIBCXX_CONSTEXPR long long
1313  signaling_NaN() throw() { return static_cast<long long>(0); }
1314 
1315  static _GLIBCXX_CONSTEXPR long long
1316  denorm_min() throw() { return static_cast<long long>(0); }
1317 
1318  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1319  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1320  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1321 
1322  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1323  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1324  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1326  };
1327 
1328  /// numeric_limits<unsigned long long> specialization.
1329  template<>
1330  struct numeric_limits<unsigned long long>
1331  {
1332  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1333 
1334  static _GLIBCXX_CONSTEXPR unsigned long long
1335  min() throw() { return 0; }
1336 
1337  static _GLIBCXX_CONSTEXPR unsigned long long
1338  max() throw() { return __LONG_LONG_MAX__ * 2ULL + 1; }
1339 
1340 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1341  static constexpr unsigned long long
1342  lowest() throw() { return min(); }
1343 #endif
1344 
1345  static _GLIBCXX_USE_CONSTEXPR int digits
1346  = __glibcxx_digits (unsigned long long);
1347  static _GLIBCXX_USE_CONSTEXPR int digits10
1348  = __glibcxx_digits10 (unsigned long long);
1349 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1350  static constexpr int max_digits10 = 0;
1351 #endif
1352  static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1353  static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1354  static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1355  static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1356 
1357  static _GLIBCXX_CONSTEXPR unsigned long long
1358  epsilon() throw() { return 0; }
1359 
1360  static _GLIBCXX_CONSTEXPR unsigned long long
1361  round_error() throw() { return 0; }
1362 
1363  static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1364  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1365  static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1366  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1367 
1368  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1369  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1370  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1371  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1372  = denorm_absent;
1373  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1374 
1375  static _GLIBCXX_CONSTEXPR unsigned long long
1376  infinity() throw() { return static_cast<unsigned long long>(0); }
1377 
1378  static _GLIBCXX_CONSTEXPR unsigned long long
1379  quiet_NaN() throw() { return static_cast<unsigned long long>(0); }
1380 
1381  static _GLIBCXX_CONSTEXPR unsigned long long
1382  signaling_NaN() throw() { return static_cast<unsigned long long>(0); }
1383 
1384  static _GLIBCXX_CONSTEXPR unsigned long long
1385  denorm_min() throw() { return static_cast<unsigned long long>(0); }
1386 
1387  static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1388  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1389  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1390 
1391  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1392  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1393  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1395  };
1396 
1397  /// numeric_limits<float> specialization.
1398  template<>
1399  struct numeric_limits<float>
1400  {
1401  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1402 
1403  static _GLIBCXX_CONSTEXPR float
1404  min() throw() { return __FLT_MIN__; }
1405 
1406  static _GLIBCXX_CONSTEXPR float
1407  max() throw() { return __FLT_MAX__; }
1408 
1409 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1410  static constexpr float
1411  lowest() throw() { return -__FLT_MAX__; }
1412 #endif
1413 
1414  static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
1415  static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
1416 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1417  static constexpr int max_digits10
1418  = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
1419 #endif
1420  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1421  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1422  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1423  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1424 
1425  static _GLIBCXX_CONSTEXPR float
1426  epsilon() throw() { return __FLT_EPSILON__; }
1427 
1428  static _GLIBCXX_CONSTEXPR float
1429  round_error() throw() { return 0.5F; }
1430 
1431  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
1432  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
1433  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
1434  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
1435 
1436  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
1437  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
1438  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1439  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1440  = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
1441  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1442  = __glibcxx_float_has_denorm_loss;
1443 
1444  static _GLIBCXX_CONSTEXPR float
1445  infinity() throw() { return __builtin_huge_valf (); }
1446 
1447  static _GLIBCXX_CONSTEXPR float
1448  quiet_NaN() throw() { return __builtin_nanf (""); }
1449 
1450  static _GLIBCXX_CONSTEXPR float
1451  signaling_NaN() throw() { return __builtin_nansf (""); }
1452 
1453  static _GLIBCXX_CONSTEXPR float
1454  denorm_min() throw() { return __FLT_DENORM_MIN__; }
1455 
1456  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1458  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1459  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1460 
1461  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
1462  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1463  = __glibcxx_float_tinyness_before;
1464  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1465  = round_to_nearest;
1466  };
1467 
1468 #undef __glibcxx_float_has_denorm_loss
1469 #undef __glibcxx_float_traps
1470 #undef __glibcxx_float_tinyness_before
1471 
1472  /// numeric_limits<double> specialization.
1473  template<>
1474  struct numeric_limits<double>
1475  {
1476  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1477 
1478  static _GLIBCXX_CONSTEXPR double
1479  min() throw() { return __DBL_MIN__; }
1480 
1481  static _GLIBCXX_CONSTEXPR double
1482  max() throw() { return __DBL_MAX__; }
1483 
1484 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1485  static constexpr double
1486  lowest() throw() { return -__DBL_MAX__; }
1487 #endif
1488 
1489  static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
1490  static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
1491 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1492  static constexpr int max_digits10
1493  = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
1494 #endif
1495  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1496  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1497  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1498  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1499 
1500  static _GLIBCXX_CONSTEXPR double
1501  epsilon() throw() { return __DBL_EPSILON__; }
1502 
1503  static _GLIBCXX_CONSTEXPR double
1504  round_error() throw() { return 0.5; }
1505 
1506  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
1507  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
1508  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
1509  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
1510 
1511  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
1512  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
1513  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1514  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1515  = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1516  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1517  = __glibcxx_double_has_denorm_loss;
1518 
1519  static _GLIBCXX_CONSTEXPR double
1520  infinity() throw() { return __builtin_huge_val(); }
1521 
1522  static _GLIBCXX_CONSTEXPR double
1523  quiet_NaN() throw() { return __builtin_nan (""); }
1524 
1525  static _GLIBCXX_CONSTEXPR double
1526  signaling_NaN() throw() { return __builtin_nans (""); }
1527 
1528  static _GLIBCXX_CONSTEXPR double
1529  denorm_min() throw() { return __DBL_DENORM_MIN__; }
1530 
1531  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1533  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1534  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1535 
1536  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
1537  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1538  = __glibcxx_double_tinyness_before;
1539  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1540  = round_to_nearest;
1541  };
1542 
1543 #undef __glibcxx_double_has_denorm_loss
1544 #undef __glibcxx_double_traps
1545 #undef __glibcxx_double_tinyness_before
1546 
1547  /// numeric_limits<long double> specialization.
1548  template<>
1549  struct numeric_limits<long double>
1550  {
1551  static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1552 
1553  static _GLIBCXX_CONSTEXPR long double
1554  min() throw() { return __LDBL_MIN__; }
1555 
1556  static _GLIBCXX_CONSTEXPR long double
1557  max() throw() { return __LDBL_MAX__; }
1558 
1559 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1560  static constexpr long double
1561  lowest() throw() { return -__LDBL_MAX__; }
1562 #endif
1563 
1564  static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
1565  static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
1566 #ifdef __GXX_EXPERIMENTAL_CXX0X__
1567  static _GLIBCXX_USE_CONSTEXPR int max_digits10
1568  = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
1569 #endif
1570  static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1571  static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1572  static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1573  static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1574 
1575  static _GLIBCXX_CONSTEXPR long double
1576  epsilon() throw() { return __LDBL_EPSILON__; }
1577 
1578  static _GLIBCXX_CONSTEXPR long double
1579  round_error() throw() { return 0.5L; }
1580 
1581  static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
1582  static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
1583  static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
1584  static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
1585 
1586  static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
1587  static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
1588  static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1589  static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1590  = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1591  static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1592  = __glibcxx_long_double_has_denorm_loss;
1593 
1594  static _GLIBCXX_CONSTEXPR long double
1595  infinity() throw() { return __builtin_huge_vall (); }
1596 
1597  static _GLIBCXX_CONSTEXPR long double
1598  quiet_NaN() throw() { return __builtin_nanl (""); }
1599 
1600  static _GLIBCXX_CONSTEXPR long double
1601  signaling_NaN() throw() { return __builtin_nansl (""); }
1602 
1603  static _GLIBCXX_CONSTEXPR long double
1604  denorm_min() throw() { return __LDBL_DENORM_MIN__; }
1605 
1606  static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1608  static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1609  static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1610 
1611  static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
1612  static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
1613  __glibcxx_long_double_tinyness_before;
1614  static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
1616  };
1617 
1618 #undef __glibcxx_long_double_has_denorm_loss
1619 #undef __glibcxx_long_double_traps
1620 #undef __glibcxx_long_double_tinyness_before
1621 
1622 _GLIBCXX_END_NAMESPACE_VERSION
1623 } // namespace
1624 
1625 #undef __glibcxx_signed
1626 #undef __glibcxx_min
1627 #undef __glibcxx_max
1628 #undef __glibcxx_digits
1629 #undef __glibcxx_digits10
1630 #undef __glibcxx_max_digits10
1631 
1632 #endif // _GLIBCXX_NUMERIC_LIMITS