Line data Source code
1 : // The template and inlines for the numeric_limits classes. -*- C++ -*-
2 :
3 : // Copyright (C) 1999-2013 Free Software Foundation, Inc.
4 : //
5 : // This file is part of the GNU ISO C++ Library. This library is free
6 : // software; you can redistribute it and/or modify it under the
7 : // terms of the GNU General Public License as published by the
8 : // Free Software Foundation; either version 3, or (at your option)
9 : // any later version.
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(T) ((T)(-1) < 0)
129 :
130 : #define __glibcxx_min(T) \
131 : (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
132 :
133 : #define __glibcxx_max(T) \
134 : (__glibcxx_signed (T) ? \
135 : (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
136 :
137 : #define __glibcxx_digits(T) \
138 : (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
139 :
140 : // The fraction 643/2136 approximates log10(2) to 7 significant digits.
141 : #define __glibcxx_digits10(T) \
142 : (__glibcxx_digits (T) * 643L / 2136)
143 :
144 : #define __glibcxx_max_digits10(T) \
145 : (2 + (T) * 643L / 2136)
146 :
147 : namespace std _GLIBCXX_VISIBILITY(default)
148 : {
149 : _GLIBCXX_BEGIN_NAMESPACE_VERSION
150 :
151 : /**
152 : * @brief Describes the rounding style for floating-point types.
153 : *
154 : * This is used in the std::numeric_limits class.
155 : */
156 : enum float_round_style
157 : {
158 : round_indeterminate = -1, /// Intermediate.
159 : round_toward_zero = 0, /// To zero.
160 : round_to_nearest = 1, /// To the nearest representable value.
161 : round_toward_infinity = 2, /// To infinity.
162 : round_toward_neg_infinity = 3 /// To negative infinity.
163 : };
164 :
165 : /**
166 : * @brief Describes the denormalization for floating-point types.
167 : *
168 : * These values represent the presence or absence of a variable number
169 : * of exponent bits. This type is used in the std::numeric_limits class.
170 : */
171 : enum float_denorm_style
172 : {
173 : /// Indeterminate at compile time whether denormalized values are allowed.
174 : denorm_indeterminate = -1,
175 : /// The type does not allow denormalized values.
176 : denorm_absent = 0,
177 : /// The type allows denormalized values.
178 : denorm_present = 1
179 : };
180 :
181 : /**
182 : * @brief Part of std::numeric_limits.
183 : *
184 : * The @c static @c const members are usable as integral constant
185 : * expressions.
186 : *
187 : * @note This is a separate class for purposes of efficiency; you
188 : * should only access these members as part of an instantiation
189 : * of the std::numeric_limits class.
190 : */
191 : struct __numeric_limits_base
192 : {
193 : /** This will be true for all fundamental types (which have
194 : specializations), and false for everything else. */
195 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
196 :
197 : /** The number of @c radix digits that be represented without change: for
198 : integer types, the number of non-sign bits in the mantissa; for
199 : floating types, the number of @c radix digits in the mantissa. */
200 : static _GLIBCXX_USE_CONSTEXPR int digits = 0;
201 :
202 : /** The number of base 10 digits that can be represented without change. */
203 : static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
204 :
205 : #if __cplusplus >= 201103L
206 : /** The number of base 10 digits required to ensure that values which
207 : differ are always differentiated. */
208 : static constexpr int max_digits10 = 0;
209 : #endif
210 :
211 : /** True if the type is signed. */
212 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
213 :
214 : /** True if the type is integer. */
215 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
216 :
217 : /** True if the type uses an exact representation. All integer types are
218 : exact, but not all exact types are integer. For example, rational and
219 : fixed-exponent representations are exact but not integer. */
220 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
221 :
222 : /** For integer types, specifies the base of the representation. For
223 : floating types, specifies the base of the exponent representation. */
224 : static _GLIBCXX_USE_CONSTEXPR int radix = 0;
225 :
226 : /** The minimum negative integer such that @c radix raised to the power of
227 : (one less than that integer) is a normalized floating point number. */
228 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
229 :
230 : /** The minimum negative integer such that 10 raised to that power is in
231 : the range of normalized floating point numbers. */
232 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
233 :
234 : /** The maximum positive integer such that @c radix raised to the power of
235 : (one less than that integer) is a representable finite floating point
236 : number. */
237 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
238 :
239 : /** The maximum positive integer such that 10 raised to that power is in
240 : the range of representable finite floating point numbers. */
241 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
242 :
243 : /** True if the type has a representation for positive infinity. */
244 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
245 :
246 : /** True if the type has a representation for a quiet (non-signaling)
247 : Not a Number. */
248 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
249 :
250 : /** True if the type has a representation for a signaling
251 : Not a Number. */
252 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
253 :
254 : /** See std::float_denorm_style for more information. */
255 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
256 :
257 : /** True if loss of accuracy is detected as a denormalization loss,
258 : rather than as an inexact result. */
259 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
260 :
261 : /** True if-and-only-if the type adheres to the IEC 559 standard, also
262 : known as IEEE 754. (Only makes sense for floating point types.) */
263 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
264 :
265 : /** True if the set of values representable by the type is
266 : finite. All built-in types are bounded, this member would be
267 : false for arbitrary precision types. */
268 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
269 :
270 : /** True if the type is @e modulo. A type is modulo if, for any
271 : operation involving +, -, or * on values of that type whose
272 : result would fall outside the range [min(),max()], the value
273 : returned differs from the true value by an integer multiple of
274 : max() - min() + 1. On most machines, this is false for floating
275 : types, true for unsigned integers, and true for signed integers.
276 : See PR22200 about signed integers. */
277 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
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 =
289 : round_toward_zero;
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>
304 : struct numeric_limits : public __numeric_limits_base
305 : {
306 : /** The minimum finite value, or for floating types with
307 : denormalization, the minimum positive normalized value. */
308 : static _GLIBCXX_CONSTEXPR _Tp
309 : min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
310 :
311 : /** The maximum finite value. */
312 : static _GLIBCXX_CONSTEXPR _Tp
313 : max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
314 :
315 : #if __cplusplus >= 201103L
316 : /** A finite value x such that there is no other finite value y
317 : * where y < x. */
318 : static constexpr _Tp
319 : lowest() noexcept { return _Tp(); }
320 : #endif
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() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
326 :
327 : /** The maximum rounding error measurement (see LIA-1). */
328 : static _GLIBCXX_CONSTEXPR _Tp
329 : round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
330 :
331 : /** The representation of positive infinity, if @c has_infinity. */
332 : static _GLIBCXX_CONSTEXPR _Tp
333 : infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
334 :
335 : /** The representation of a quiet Not a Number,
336 : if @c has_quiet_NaN. */
337 : static _GLIBCXX_CONSTEXPR _Tp
338 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
339 :
340 : /** The representation of a signaling Not a Number, if
341 : @c has_signaling_NaN. */
342 : static _GLIBCXX_CONSTEXPR _Tp
343 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
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() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
350 : };
351 :
352 : #if __cplusplus >= 201103L
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() _GLIBCXX_USE_NOEXCEPT { return false; }
377 :
378 : static _GLIBCXX_CONSTEXPR bool
379 : max() _GLIBCXX_USE_NOEXCEPT { return true; }
380 :
381 : #if __cplusplus >= 201103L
382 : static constexpr bool
383 : lowest() noexcept { return min(); }
384 : #endif
385 : static _GLIBCXX_USE_CONSTEXPR int digits = 1;
386 : static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
387 : #if __cplusplus >= 201103L
388 : static constexpr int max_digits10 = 0;
389 : #endif
390 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
391 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
392 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
393 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
394 :
395 : static _GLIBCXX_CONSTEXPR bool
396 : epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
397 :
398 : static _GLIBCXX_CONSTEXPR bool
399 : round_error() _GLIBCXX_USE_NOEXCEPT { 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() _GLIBCXX_USE_NOEXCEPT { return false; }
415 :
416 : static _GLIBCXX_CONSTEXPR bool
417 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
418 :
419 : static _GLIBCXX_CONSTEXPR bool
420 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
421 :
422 : static _GLIBCXX_CONSTEXPR bool
423 : denorm_min() _GLIBCXX_USE_NOEXCEPT { 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
435 : = round_toward_zero;
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() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
446 :
447 : static _GLIBCXX_CONSTEXPR char
448 : max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
449 :
450 : #if __cplusplus >= 201103L
451 : static constexpr char
452 : lowest() noexcept { 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 : #if __cplusplus >= 201103L
458 : static constexpr int max_digits10 = 0;
459 : #endif
460 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
461 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
462 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
463 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
464 :
465 : static _GLIBCXX_CONSTEXPR char
466 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
467 :
468 : static _GLIBCXX_CONSTEXPR char
469 : round_error() _GLIBCXX_USE_NOEXCEPT { 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() _GLIBCXX_USE_NOEXCEPT { return char(); }
485 :
486 : static _GLIBCXX_CONSTEXPR char
487 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
488 :
489 : static _GLIBCXX_CONSTEXPR char
490 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
491 :
492 : static _GLIBCXX_CONSTEXPR char
493 : denorm_min() _GLIBCXX_USE_NOEXCEPT { 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 = !is_signed;
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
502 : = round_toward_zero;
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() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
513 :
514 : static _GLIBCXX_CONSTEXPR signed char
515 : max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
516 :
517 : #if __cplusplus >= 201103L
518 : static constexpr signed char
519 : lowest() noexcept { 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 : #if __cplusplus >= 201103L
526 : static constexpr int max_digits10 = 0;
527 : #endif
528 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
529 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
530 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
531 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
532 :
533 : static _GLIBCXX_CONSTEXPR signed char
534 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
535 :
536 : static _GLIBCXX_CONSTEXPR signed char
537 : round_error() _GLIBCXX_USE_NOEXCEPT { 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() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
553 :
554 : static _GLIBCXX_CONSTEXPR signed char
555 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
556 :
557 : static _GLIBCXX_CONSTEXPR signed char
558 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
559 : { return static_cast<signed char>(0); }
560 :
561 : static _GLIBCXX_CONSTEXPR signed char
562 : denorm_min() _GLIBCXX_USE_NOEXCEPT
563 : { return static_cast<signed char>(0); }
564 :
565 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
566 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
567 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
568 :
569 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
570 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
571 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
572 : = round_toward_zero;
573 : };
574 :
575 : /// numeric_limits<unsigned char> specialization.
576 : template<>
577 : struct numeric_limits<unsigned char>
578 : {
579 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
580 :
581 : static _GLIBCXX_CONSTEXPR unsigned char
582 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
583 :
584 : static _GLIBCXX_CONSTEXPR unsigned char
585 : max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
586 :
587 : #if __cplusplus >= 201103L
588 : static constexpr unsigned char
589 : lowest() noexcept { return min(); }
590 : #endif
591 :
592 : static _GLIBCXX_USE_CONSTEXPR int digits
593 : = __glibcxx_digits (unsigned char);
594 : static _GLIBCXX_USE_CONSTEXPR int digits10
595 : = __glibcxx_digits10 (unsigned char);
596 : #if __cplusplus >= 201103L
597 : static constexpr int max_digits10 = 0;
598 : #endif
599 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
600 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
601 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
602 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
603 :
604 : static _GLIBCXX_CONSTEXPR unsigned char
605 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
606 :
607 : static _GLIBCXX_CONSTEXPR unsigned char
608 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
609 :
610 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
611 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
612 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
613 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
614 :
615 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
616 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
617 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
618 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
619 : = denorm_absent;
620 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
621 :
622 : static _GLIBCXX_CONSTEXPR unsigned char
623 : infinity() _GLIBCXX_USE_NOEXCEPT
624 : { return static_cast<unsigned char>(0); }
625 :
626 : static _GLIBCXX_CONSTEXPR unsigned char
627 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
628 : { return static_cast<unsigned char>(0); }
629 :
630 : static _GLIBCXX_CONSTEXPR unsigned char
631 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
632 : { return static_cast<unsigned char>(0); }
633 :
634 : static _GLIBCXX_CONSTEXPR unsigned char
635 : denorm_min() _GLIBCXX_USE_NOEXCEPT
636 : { return static_cast<unsigned char>(0); }
637 :
638 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
639 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
640 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
641 :
642 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
643 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
644 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
645 : = round_toward_zero;
646 : };
647 :
648 : /// numeric_limits<wchar_t> specialization.
649 : template<>
650 : struct numeric_limits<wchar_t>
651 : {
652 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
653 :
654 : static _GLIBCXX_CONSTEXPR wchar_t
655 : min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
656 :
657 : static _GLIBCXX_CONSTEXPR wchar_t
658 : max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
659 :
660 : #if __cplusplus >= 201103L
661 : static constexpr wchar_t
662 : lowest() noexcept { return min(); }
663 : #endif
664 :
665 : static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
666 : static _GLIBCXX_USE_CONSTEXPR int digits10
667 : = __glibcxx_digits10 (wchar_t);
668 : #if __cplusplus >= 201103L
669 : static constexpr int max_digits10 = 0;
670 : #endif
671 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
672 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
673 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
674 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
675 :
676 : static _GLIBCXX_CONSTEXPR wchar_t
677 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
678 :
679 : static _GLIBCXX_CONSTEXPR wchar_t
680 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
681 :
682 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
683 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
684 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
685 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
686 :
687 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
688 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
689 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
690 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
691 : = denorm_absent;
692 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
693 :
694 : static _GLIBCXX_CONSTEXPR wchar_t
695 : infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
696 :
697 : static _GLIBCXX_CONSTEXPR wchar_t
698 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
699 :
700 : static _GLIBCXX_CONSTEXPR wchar_t
701 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
702 :
703 : static _GLIBCXX_CONSTEXPR wchar_t
704 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
705 :
706 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
707 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
708 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
709 :
710 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
711 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
712 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
713 : = round_toward_zero;
714 : };
715 :
716 : #if __cplusplus >= 201103L
717 : /// numeric_limits<char16_t> specialization.
718 : template<>
719 : struct numeric_limits<char16_t>
720 : {
721 : static constexpr bool is_specialized = true;
722 :
723 : static constexpr char16_t
724 : min() noexcept { return __glibcxx_min (char16_t); }
725 :
726 : static constexpr char16_t
727 : max() noexcept { return __glibcxx_max (char16_t); }
728 :
729 : static constexpr char16_t
730 : lowest() noexcept { return min(); }
731 :
732 : static constexpr int digits = __glibcxx_digits (char16_t);
733 : static constexpr int digits10 = __glibcxx_digits10 (char16_t);
734 : static constexpr int max_digits10 = 0;
735 : static constexpr bool is_signed = __glibcxx_signed (char16_t);
736 : static constexpr bool is_integer = true;
737 : static constexpr bool is_exact = true;
738 : static constexpr int radix = 2;
739 :
740 : static constexpr char16_t
741 : epsilon() noexcept { return 0; }
742 :
743 : static constexpr char16_t
744 : round_error() noexcept { return 0; }
745 :
746 : static constexpr int min_exponent = 0;
747 : static constexpr int min_exponent10 = 0;
748 : static constexpr int max_exponent = 0;
749 : static constexpr int max_exponent10 = 0;
750 :
751 : static constexpr bool has_infinity = false;
752 : static constexpr bool has_quiet_NaN = false;
753 : static constexpr bool has_signaling_NaN = false;
754 : static constexpr float_denorm_style has_denorm = denorm_absent;
755 : static constexpr bool has_denorm_loss = false;
756 :
757 : static constexpr char16_t
758 : infinity() noexcept { return char16_t(); }
759 :
760 : static constexpr char16_t
761 : quiet_NaN() noexcept { return char16_t(); }
762 :
763 : static constexpr char16_t
764 : signaling_NaN() noexcept { return char16_t(); }
765 :
766 : static constexpr char16_t
767 : denorm_min() noexcept { return char16_t(); }
768 :
769 : static constexpr bool is_iec559 = false;
770 : static constexpr bool is_bounded = true;
771 : static constexpr bool is_modulo = !is_signed;
772 :
773 : static constexpr bool traps = __glibcxx_integral_traps;
774 : static constexpr bool tinyness_before = false;
775 : static constexpr float_round_style round_style = round_toward_zero;
776 : };
777 :
778 : /// numeric_limits<char32_t> specialization.
779 : template<>
780 : struct numeric_limits<char32_t>
781 : {
782 : static constexpr bool is_specialized = true;
783 :
784 : static constexpr char32_t
785 : min() noexcept { return __glibcxx_min (char32_t); }
786 :
787 : static constexpr char32_t
788 : max() noexcept { return __glibcxx_max (char32_t); }
789 :
790 : static constexpr char32_t
791 : lowest() noexcept { return min(); }
792 :
793 : static constexpr int digits = __glibcxx_digits (char32_t);
794 : static constexpr int digits10 = __glibcxx_digits10 (char32_t);
795 : static constexpr int max_digits10 = 0;
796 : static constexpr bool is_signed = __glibcxx_signed (char32_t);
797 : static constexpr bool is_integer = true;
798 : static constexpr bool is_exact = true;
799 : static constexpr int radix = 2;
800 :
801 : static constexpr char32_t
802 : epsilon() noexcept { return 0; }
803 :
804 : static constexpr char32_t
805 : round_error() noexcept { return 0; }
806 :
807 : static constexpr int min_exponent = 0;
808 : static constexpr int min_exponent10 = 0;
809 : static constexpr int max_exponent = 0;
810 : static constexpr int max_exponent10 = 0;
811 :
812 : static constexpr bool has_infinity = false;
813 : static constexpr bool has_quiet_NaN = false;
814 : static constexpr bool has_signaling_NaN = false;
815 : static constexpr float_denorm_style has_denorm = denorm_absent;
816 : static constexpr bool has_denorm_loss = false;
817 :
818 : static constexpr char32_t
819 : infinity() noexcept { return char32_t(); }
820 :
821 : static constexpr char32_t
822 : quiet_NaN() noexcept { return char32_t(); }
823 :
824 : static constexpr char32_t
825 : signaling_NaN() noexcept { return char32_t(); }
826 :
827 : static constexpr char32_t
828 : denorm_min() noexcept { return char32_t(); }
829 :
830 : static constexpr bool is_iec559 = false;
831 : static constexpr bool is_bounded = true;
832 : static constexpr bool is_modulo = !is_signed;
833 :
834 : static constexpr bool traps = __glibcxx_integral_traps;
835 : static constexpr bool tinyness_before = false;
836 : static constexpr float_round_style round_style = round_toward_zero;
837 : };
838 : #endif
839 :
840 : /// numeric_limits<short> specialization.
841 : template<>
842 : struct numeric_limits<short>
843 : {
844 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
845 :
846 : static _GLIBCXX_CONSTEXPR short
847 : min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
848 :
849 : static _GLIBCXX_CONSTEXPR short
850 : max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
851 :
852 : #if __cplusplus >= 201103L
853 : static constexpr short
854 : lowest() noexcept { return min(); }
855 : #endif
856 :
857 : static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
858 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
859 : #if __cplusplus >= 201103L
860 : static constexpr int max_digits10 = 0;
861 : #endif
862 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
863 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
864 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
865 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
866 :
867 : static _GLIBCXX_CONSTEXPR short
868 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
869 :
870 : static _GLIBCXX_CONSTEXPR short
871 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
872 :
873 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
874 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
875 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
876 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
877 :
878 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
879 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
880 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
881 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
882 : = denorm_absent;
883 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
884 :
885 : static _GLIBCXX_CONSTEXPR short
886 : infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
887 :
888 : static _GLIBCXX_CONSTEXPR short
889 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
890 :
891 : static _GLIBCXX_CONSTEXPR short
892 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
893 :
894 : static _GLIBCXX_CONSTEXPR short
895 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
896 :
897 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
898 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
899 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
900 :
901 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
902 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
903 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
904 : = round_toward_zero;
905 : };
906 :
907 : /// numeric_limits<unsigned short> specialization.
908 : template<>
909 : struct numeric_limits<unsigned short>
910 : {
911 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
912 :
913 : static _GLIBCXX_CONSTEXPR unsigned short
914 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
915 :
916 : static _GLIBCXX_CONSTEXPR unsigned short
917 : max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
918 :
919 : #if __cplusplus >= 201103L
920 : static constexpr unsigned short
921 : lowest() noexcept { return min(); }
922 : #endif
923 :
924 : static _GLIBCXX_USE_CONSTEXPR int digits
925 : = __glibcxx_digits (unsigned short);
926 : static _GLIBCXX_USE_CONSTEXPR int digits10
927 : = __glibcxx_digits10 (unsigned short);
928 : #if __cplusplus >= 201103L
929 : static constexpr int max_digits10 = 0;
930 : #endif
931 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
932 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
933 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
934 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
935 :
936 : static _GLIBCXX_CONSTEXPR unsigned short
937 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
938 :
939 : static _GLIBCXX_CONSTEXPR unsigned short
940 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
941 :
942 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
943 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
944 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
945 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
946 :
947 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
948 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
949 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
950 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
951 : = denorm_absent;
952 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
953 :
954 : static _GLIBCXX_CONSTEXPR unsigned short
955 : infinity() _GLIBCXX_USE_NOEXCEPT
956 : { return static_cast<unsigned short>(0); }
957 :
958 : static _GLIBCXX_CONSTEXPR unsigned short
959 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
960 : { return static_cast<unsigned short>(0); }
961 :
962 : static _GLIBCXX_CONSTEXPR unsigned short
963 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
964 : { return static_cast<unsigned short>(0); }
965 :
966 : static _GLIBCXX_CONSTEXPR unsigned short
967 : denorm_min() _GLIBCXX_USE_NOEXCEPT
968 : { return static_cast<unsigned short>(0); }
969 :
970 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
971 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
972 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
973 :
974 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
975 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
976 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
977 : = round_toward_zero;
978 : };
979 :
980 : /// numeric_limits<int> specialization.
981 : template<>
982 : struct numeric_limits<int>
983 : {
984 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
985 :
986 : static _GLIBCXX_CONSTEXPR int
987 : min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
988 :
989 : static _GLIBCXX_CONSTEXPR int
990 : max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
991 :
992 : #if __cplusplus >= 201103L
993 : static constexpr int
994 : lowest() noexcept { return min(); }
995 : #endif
996 :
997 : static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
998 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
999 : #if __cplusplus >= 201103L
1000 : static constexpr int max_digits10 = 0;
1001 : #endif
1002 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1003 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1004 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1005 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1006 :
1007 : static _GLIBCXX_CONSTEXPR int
1008 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1009 :
1010 : static _GLIBCXX_CONSTEXPR int
1011 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1012 :
1013 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1014 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1015 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1016 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1017 :
1018 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1019 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1020 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1021 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1022 : = denorm_absent;
1023 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1024 :
1025 : static _GLIBCXX_CONSTEXPR int
1026 : infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1027 :
1028 : static _GLIBCXX_CONSTEXPR int
1029 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1030 :
1031 : static _GLIBCXX_CONSTEXPR int
1032 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1033 :
1034 : static _GLIBCXX_CONSTEXPR int
1035 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1036 :
1037 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1038 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1039 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1040 :
1041 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1042 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1043 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1044 : = round_toward_zero;
1045 : };
1046 :
1047 : /// numeric_limits<unsigned int> specialization.
1048 : template<>
1049 : struct numeric_limits<unsigned int>
1050 : {
1051 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1052 :
1053 : static _GLIBCXX_CONSTEXPR unsigned int
1054 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1055 :
1056 : static _GLIBCXX_CONSTEXPR unsigned int
1057 : max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
1058 :
1059 : #if __cplusplus >= 201103L
1060 : static constexpr unsigned int
1061 : lowest() noexcept { return min(); }
1062 : #endif
1063 :
1064 : static _GLIBCXX_USE_CONSTEXPR int digits
1065 : = __glibcxx_digits (unsigned int);
1066 : static _GLIBCXX_USE_CONSTEXPR int digits10
1067 : = __glibcxx_digits10 (unsigned int);
1068 : #if __cplusplus >= 201103L
1069 : static constexpr int max_digits10 = 0;
1070 : #endif
1071 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1072 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1073 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1074 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1075 :
1076 : static _GLIBCXX_CONSTEXPR unsigned int
1077 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1078 :
1079 : static _GLIBCXX_CONSTEXPR unsigned int
1080 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1081 :
1082 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1083 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1084 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1085 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1086 :
1087 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1088 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1089 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1090 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1091 : = denorm_absent;
1092 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1093 :
1094 : static _GLIBCXX_CONSTEXPR unsigned int
1095 : infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
1096 :
1097 : static _GLIBCXX_CONSTEXPR unsigned int
1098 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1099 : { return static_cast<unsigned int>(0); }
1100 :
1101 : static _GLIBCXX_CONSTEXPR unsigned int
1102 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1103 : { return static_cast<unsigned int>(0); }
1104 :
1105 : static _GLIBCXX_CONSTEXPR unsigned int
1106 : denorm_min() _GLIBCXX_USE_NOEXCEPT
1107 : { return static_cast<unsigned int>(0); }
1108 :
1109 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1110 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1111 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1112 :
1113 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1114 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1115 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1116 : = round_toward_zero;
1117 : };
1118 :
1119 : /// numeric_limits<long> specialization.
1120 : template<>
1121 : struct numeric_limits<long>
1122 : {
1123 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1124 :
1125 : static _GLIBCXX_CONSTEXPR long
1126 : min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
1127 :
1128 : static _GLIBCXX_CONSTEXPR long
1129 3413489 : max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
1130 :
1131 : #if __cplusplus >= 201103L
1132 : static constexpr long
1133 : lowest() noexcept { return min(); }
1134 : #endif
1135 :
1136 : static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
1137 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
1138 : #if __cplusplus >= 201103L
1139 : static constexpr int max_digits10 = 0;
1140 : #endif
1141 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1142 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1143 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1144 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1145 :
1146 : static _GLIBCXX_CONSTEXPR long
1147 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1148 :
1149 : static _GLIBCXX_CONSTEXPR long
1150 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1151 :
1152 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1153 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1154 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1155 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1156 :
1157 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1158 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1159 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1160 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1161 : = denorm_absent;
1162 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1163 :
1164 : static _GLIBCXX_CONSTEXPR long
1165 : infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1166 :
1167 : static _GLIBCXX_CONSTEXPR long
1168 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1169 :
1170 : static _GLIBCXX_CONSTEXPR long
1171 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1172 :
1173 : static _GLIBCXX_CONSTEXPR long
1174 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1175 :
1176 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1177 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1178 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1179 :
1180 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1181 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1182 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1183 : = round_toward_zero;
1184 : };
1185 :
1186 : /// numeric_limits<unsigned long> specialization.
1187 : template<>
1188 : struct numeric_limits<unsigned long>
1189 : {
1190 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1191 :
1192 : static _GLIBCXX_CONSTEXPR unsigned long
1193 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1194 :
1195 : static _GLIBCXX_CONSTEXPR unsigned long
1196 276 : max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
1197 :
1198 : #if __cplusplus >= 201103L
1199 : static constexpr unsigned long
1200 : lowest() noexcept { return min(); }
1201 : #endif
1202 :
1203 : static _GLIBCXX_USE_CONSTEXPR int digits
1204 : = __glibcxx_digits (unsigned long);
1205 : static _GLIBCXX_USE_CONSTEXPR int digits10
1206 : = __glibcxx_digits10 (unsigned long);
1207 : #if __cplusplus >= 201103L
1208 : static constexpr int max_digits10 = 0;
1209 : #endif
1210 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1211 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1212 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1213 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1214 :
1215 : static _GLIBCXX_CONSTEXPR unsigned long
1216 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1217 :
1218 : static _GLIBCXX_CONSTEXPR unsigned long
1219 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1220 :
1221 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1222 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1223 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1224 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1225 :
1226 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1227 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1228 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1229 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1230 : = denorm_absent;
1231 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1232 :
1233 : static _GLIBCXX_CONSTEXPR unsigned long
1234 : infinity() _GLIBCXX_USE_NOEXCEPT
1235 : { return static_cast<unsigned long>(0); }
1236 :
1237 : static _GLIBCXX_CONSTEXPR unsigned long
1238 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1239 : { return static_cast<unsigned long>(0); }
1240 :
1241 : static _GLIBCXX_CONSTEXPR unsigned long
1242 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1243 : { return static_cast<unsigned long>(0); }
1244 :
1245 : static _GLIBCXX_CONSTEXPR unsigned long
1246 : denorm_min() _GLIBCXX_USE_NOEXCEPT
1247 : { 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
1256 : = round_toward_zero;
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() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
1267 :
1268 : static _GLIBCXX_CONSTEXPR long long
1269 : max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
1270 :
1271 : #if __cplusplus >= 201103L
1272 : static constexpr long long
1273 : lowest() noexcept { 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 : #if __cplusplus >= 201103L
1281 : static constexpr int max_digits10 = 0;
1282 : #endif
1283 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1284 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1285 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1286 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1287 :
1288 : static _GLIBCXX_CONSTEXPR long long
1289 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1290 :
1291 : static _GLIBCXX_CONSTEXPR long long
1292 : round_error() _GLIBCXX_USE_NOEXCEPT { 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() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1308 :
1309 : static _GLIBCXX_CONSTEXPR long long
1310 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1311 :
1312 : static _GLIBCXX_CONSTEXPR long long
1313 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1314 : { return static_cast<long long>(0); }
1315 :
1316 : static _GLIBCXX_CONSTEXPR long long
1317 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1318 :
1319 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1320 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1321 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1322 :
1323 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1324 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1325 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1326 : = round_toward_zero;
1327 : };
1328 :
1329 : /// numeric_limits<unsigned long long> specialization.
1330 : template<>
1331 : struct numeric_limits<unsigned long long>
1332 : {
1333 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1334 :
1335 : static _GLIBCXX_CONSTEXPR unsigned long long
1336 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1337 :
1338 : static _GLIBCXX_CONSTEXPR unsigned long long
1339 : max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
1340 :
1341 : #if __cplusplus >= 201103L
1342 : static constexpr unsigned long long
1343 : lowest() noexcept { return min(); }
1344 : #endif
1345 :
1346 : static _GLIBCXX_USE_CONSTEXPR int digits
1347 : = __glibcxx_digits (unsigned long long);
1348 : static _GLIBCXX_USE_CONSTEXPR int digits10
1349 : = __glibcxx_digits10 (unsigned long long);
1350 : #if __cplusplus >= 201103L
1351 : static constexpr int max_digits10 = 0;
1352 : #endif
1353 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1354 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1355 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1356 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1357 :
1358 : static _GLIBCXX_CONSTEXPR unsigned long long
1359 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1360 :
1361 : static _GLIBCXX_CONSTEXPR unsigned long long
1362 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1363 :
1364 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1365 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1366 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1367 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1368 :
1369 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1370 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1371 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1372 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1373 : = denorm_absent;
1374 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1375 :
1376 : static _GLIBCXX_CONSTEXPR unsigned long long
1377 : infinity() _GLIBCXX_USE_NOEXCEPT
1378 : { return static_cast<unsigned long long>(0); }
1379 :
1380 : static _GLIBCXX_CONSTEXPR unsigned long long
1381 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1382 : { return static_cast<unsigned long long>(0); }
1383 :
1384 : static _GLIBCXX_CONSTEXPR unsigned long long
1385 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1386 : { return static_cast<unsigned long long>(0); }
1387 :
1388 : static _GLIBCXX_CONSTEXPR unsigned long long
1389 : denorm_min() _GLIBCXX_USE_NOEXCEPT
1390 : { return static_cast<unsigned long long>(0); }
1391 :
1392 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1393 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1394 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1395 :
1396 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1397 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1398 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1399 : = round_toward_zero;
1400 : };
1401 :
1402 : #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
1403 : /// numeric_limits<__int128> specialization.
1404 : template<>
1405 : struct numeric_limits<__int128>
1406 : {
1407 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1408 :
1409 : static _GLIBCXX_CONSTEXPR __int128
1410 : min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
1411 :
1412 : static _GLIBCXX_CONSTEXPR __int128
1413 : max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
1414 :
1415 : #if __cplusplus >= 201103L
1416 : static constexpr __int128
1417 : lowest() noexcept { return min(); }
1418 : #endif
1419 :
1420 : static _GLIBCXX_USE_CONSTEXPR int digits
1421 : = __glibcxx_digits (__int128);
1422 : static _GLIBCXX_USE_CONSTEXPR int digits10
1423 : = __glibcxx_digits10 (__int128);
1424 : #if __cplusplus >= 201103L
1425 : static constexpr int max_digits10 = 0;
1426 : #endif
1427 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1428 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1429 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1430 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1431 :
1432 : static _GLIBCXX_CONSTEXPR __int128
1433 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1434 :
1435 : static _GLIBCXX_CONSTEXPR __int128
1436 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1437 :
1438 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1439 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1440 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1441 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1442 :
1443 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1444 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1445 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1446 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1447 : = denorm_absent;
1448 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1449 :
1450 : static _GLIBCXX_CONSTEXPR __int128
1451 : infinity() _GLIBCXX_USE_NOEXCEPT
1452 : { return static_cast<__int128>(0); }
1453 :
1454 : static _GLIBCXX_CONSTEXPR __int128
1455 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1456 : { return static_cast<__int128>(0); }
1457 :
1458 : static _GLIBCXX_CONSTEXPR __int128
1459 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1460 : { return static_cast<__int128>(0); }
1461 :
1462 : static _GLIBCXX_CONSTEXPR __int128
1463 : denorm_min() _GLIBCXX_USE_NOEXCEPT
1464 : { return static_cast<__int128>(0); }
1465 :
1466 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1467 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1468 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1469 :
1470 : static _GLIBCXX_USE_CONSTEXPR bool traps
1471 : = __glibcxx_integral_traps;
1472 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1473 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1474 : = round_toward_zero;
1475 : };
1476 :
1477 : /// numeric_limits<unsigned __int128> specialization.
1478 : template<>
1479 : struct numeric_limits<unsigned __int128>
1480 : {
1481 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1482 :
1483 : static _GLIBCXX_CONSTEXPR unsigned __int128
1484 : min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1485 :
1486 : static _GLIBCXX_CONSTEXPR unsigned __int128
1487 : max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
1488 :
1489 : #if __cplusplus >= 201103L
1490 : static constexpr unsigned __int128
1491 : lowest() noexcept { return min(); }
1492 : #endif
1493 :
1494 : static _GLIBCXX_USE_CONSTEXPR int digits
1495 : = __glibcxx_digits (unsigned __int128);
1496 : static _GLIBCXX_USE_CONSTEXPR int digits10
1497 : = __glibcxx_digits10 (unsigned __int128);
1498 : #if __cplusplus >= 201103L
1499 : static constexpr int max_digits10 = 0;
1500 : #endif
1501 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
1502 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
1503 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
1504 : static _GLIBCXX_USE_CONSTEXPR int radix = 2;
1505 :
1506 : static _GLIBCXX_CONSTEXPR unsigned __int128
1507 : epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1508 :
1509 : static _GLIBCXX_CONSTEXPR unsigned __int128
1510 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1511 :
1512 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
1513 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
1514 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
1515 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
1516 :
1517 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
1518 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
1519 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
1520 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1521 : = denorm_absent;
1522 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1523 :
1524 : static _GLIBCXX_CONSTEXPR unsigned __int128
1525 : infinity() _GLIBCXX_USE_NOEXCEPT
1526 : { return static_cast<unsigned __int128>(0); }
1527 :
1528 : static _GLIBCXX_CONSTEXPR unsigned __int128
1529 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1530 : { return static_cast<unsigned __int128>(0); }
1531 :
1532 : static _GLIBCXX_CONSTEXPR unsigned __int128
1533 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1534 : { return static_cast<unsigned __int128>(0); }
1535 :
1536 : static _GLIBCXX_CONSTEXPR unsigned __int128
1537 : denorm_min() _GLIBCXX_USE_NOEXCEPT
1538 : { return static_cast<unsigned __int128>(0); }
1539 :
1540 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
1541 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1542 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
1543 :
1544 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
1545 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
1546 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1547 : = round_toward_zero;
1548 : };
1549 : #endif
1550 :
1551 : /// numeric_limits<float> specialization.
1552 : template<>
1553 : struct numeric_limits<float>
1554 : {
1555 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1556 :
1557 : static _GLIBCXX_CONSTEXPR float
1558 : min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
1559 :
1560 : static _GLIBCXX_CONSTEXPR float
1561 : max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
1562 :
1563 : #if __cplusplus >= 201103L
1564 : static constexpr float
1565 : lowest() noexcept { return -__FLT_MAX__; }
1566 : #endif
1567 :
1568 : static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
1569 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
1570 : #if __cplusplus >= 201103L
1571 : static constexpr int max_digits10
1572 : = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
1573 : #endif
1574 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1575 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1576 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1577 : static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1578 :
1579 : static _GLIBCXX_CONSTEXPR float
1580 : epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
1581 :
1582 : static _GLIBCXX_CONSTEXPR float
1583 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
1584 :
1585 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
1586 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
1587 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
1588 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
1589 :
1590 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
1591 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
1592 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1593 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1594 : = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
1595 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1596 : = __glibcxx_float_has_denorm_loss;
1597 :
1598 : static _GLIBCXX_CONSTEXPR float
1599 : infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
1600 :
1601 : static _GLIBCXX_CONSTEXPR float
1602 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
1603 :
1604 : static _GLIBCXX_CONSTEXPR float
1605 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
1606 :
1607 : static _GLIBCXX_CONSTEXPR float
1608 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
1609 :
1610 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1611 : = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1612 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1613 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1614 :
1615 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
1616 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1617 : = __glibcxx_float_tinyness_before;
1618 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1619 : = round_to_nearest;
1620 : };
1621 :
1622 : #undef __glibcxx_float_has_denorm_loss
1623 : #undef __glibcxx_float_traps
1624 : #undef __glibcxx_float_tinyness_before
1625 :
1626 : /// numeric_limits<double> specialization.
1627 : template<>
1628 : struct numeric_limits<double>
1629 : {
1630 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1631 :
1632 : static _GLIBCXX_CONSTEXPR double
1633 : min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
1634 :
1635 : static _GLIBCXX_CONSTEXPR double
1636 : max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
1637 :
1638 : #if __cplusplus >= 201103L
1639 : static constexpr double
1640 : lowest() noexcept { return -__DBL_MAX__; }
1641 : #endif
1642 :
1643 : static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
1644 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
1645 : #if __cplusplus >= 201103L
1646 : static constexpr int max_digits10
1647 : = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
1648 : #endif
1649 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1650 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1651 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1652 : static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1653 :
1654 : static _GLIBCXX_CONSTEXPR double
1655 : epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
1656 :
1657 : static _GLIBCXX_CONSTEXPR double
1658 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
1659 :
1660 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
1661 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
1662 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
1663 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
1664 :
1665 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
1666 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
1667 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1668 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1669 : = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1670 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1671 : = __glibcxx_double_has_denorm_loss;
1672 :
1673 : static _GLIBCXX_CONSTEXPR double
1674 : infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
1675 :
1676 : static _GLIBCXX_CONSTEXPR double
1677 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
1678 :
1679 : static _GLIBCXX_CONSTEXPR double
1680 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
1681 :
1682 : static _GLIBCXX_CONSTEXPR double
1683 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
1684 :
1685 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1686 : = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1687 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1688 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1689 :
1690 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
1691 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
1692 : = __glibcxx_double_tinyness_before;
1693 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
1694 : = round_to_nearest;
1695 : };
1696 :
1697 : #undef __glibcxx_double_has_denorm_loss
1698 : #undef __glibcxx_double_traps
1699 : #undef __glibcxx_double_tinyness_before
1700 :
1701 : /// numeric_limits<long double> specialization.
1702 : template<>
1703 : struct numeric_limits<long double>
1704 : {
1705 : static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1706 :
1707 : static _GLIBCXX_CONSTEXPR long double
1708 : min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
1709 :
1710 : static _GLIBCXX_CONSTEXPR long double
1711 : max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
1712 :
1713 : #if __cplusplus >= 201103L
1714 : static constexpr long double
1715 : lowest() noexcept { return -__LDBL_MAX__; }
1716 : #endif
1717 :
1718 : static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
1719 : static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
1720 : #if __cplusplus >= 201103L
1721 : static _GLIBCXX_USE_CONSTEXPR int max_digits10
1722 : = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
1723 : #endif
1724 : static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
1725 : static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
1726 : static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
1727 : static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
1728 :
1729 : static _GLIBCXX_CONSTEXPR long double
1730 : epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
1731 :
1732 : static _GLIBCXX_CONSTEXPR long double
1733 : round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
1734 :
1735 : static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
1736 : static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
1737 : static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
1738 : static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
1739 :
1740 : static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
1741 : static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
1742 : static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
1743 : static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
1744 : = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
1745 : static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
1746 : = __glibcxx_long_double_has_denorm_loss;
1747 :
1748 : static _GLIBCXX_CONSTEXPR long double
1749 : infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
1750 :
1751 : static _GLIBCXX_CONSTEXPR long double
1752 : quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
1753 :
1754 : static _GLIBCXX_CONSTEXPR long double
1755 : signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
1756 :
1757 : static _GLIBCXX_CONSTEXPR long double
1758 : denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
1759 :
1760 : static _GLIBCXX_USE_CONSTEXPR bool is_iec559
1761 : = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
1762 : static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
1763 : static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
1764 :
1765 : static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
1766 : static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
1767 : __glibcxx_long_double_tinyness_before;
1768 : static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
1769 : round_to_nearest;
1770 : };
1771 :
1772 : #undef __glibcxx_long_double_has_denorm_loss
1773 : #undef __glibcxx_long_double_traps
1774 : #undef __glibcxx_long_double_tinyness_before
1775 :
1776 : _GLIBCXX_END_NAMESPACE_VERSION
1777 : } // namespace
1778 :
1779 : #undef __glibcxx_signed
1780 : #undef __glibcxx_min
1781 : #undef __glibcxx_max
1782 : #undef __glibcxx_digits
1783 : #undef __glibcxx_digits10
1784 : #undef __glibcxx_max_digits10
1785 :
1786 : #endif // _GLIBCXX_NUMERIC_LIMITS
|