std_limits.h revision 97403
1// The template and inlines for the -*- C++ -*- numeric_limits classes.
2
3// Copyright (C) 1999, 2000, 2001, 2002 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 2, 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// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING.  If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// As a special exception, you may use this file as part of a free software
22// library without restriction.  Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License.  This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
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/** @file limits
39 *  This is a Standard C++ Library header.  You should @c #include this header
40 *  in your programs, rather than any of the "st[dl]_*.h" implementation files.
41 */
42
43#ifndef _CPP_NUMERIC_LIMITS
44#define _CPP_NUMERIC_LIMITS 1
45
46#pragma GCC system_header
47
48#include <bits/cpu_limits.h>
49#include <bits/c++config.h>
50
51//
52// The numeric_limits<> traits document implementation-defined aspects
53// of fundamental arithmetic data types (integers and floating points).
54// From Standard C++ point of view, there are 13 such types:
55//   * integers
56//         bool						        (1)
57//         char, signed char, unsigned char			(3)
58//         short, unsigned short				(2)
59//         int, unsigned					(2)
60//         long, unsigned long					(2)
61//
62//   * floating points
63//         float						(1)
64//         double						(1)
65//         long double						(1)
66//
67// GNU C++ undertstands (where supported by the host C-library)
68//   * integer
69//         long long, unsigned long long			(2)
70//
71// which brings us to 15 fundamental arithmetic data types in GNU C++.
72//
73//
74// Since a numeric_limits<> is a bit tricky to get right, we rely on
75// an interface composed of macros which should be defined in config/os
76// or config/cpu when they differ from the generic (read arbitrary)
77// definitions given here.
78//
79
80// These values can be overridden in the target configuration file.
81// The default values are appropriate for many 32-bit targets.
82
83#ifndef __glibcpp_char_bits
84#define __glibcpp_char_bits 8
85#endif
86#ifdef __CHAR_UNSIGNED__
87#define __glibcpp_plain_char_is_signed false
88#else
89#define __glibcpp_plain_char_is_signed true
90#endif
91#ifndef __glibcpp_short_bits
92#define __glibcpp_short_bits 16
93#endif
94#ifndef __glibcpp_int_bits
95#define __glibcpp_int_bits 32
96#endif
97#ifndef __glibcpp_long_bits
98#define __glibcpp_long_bits 32
99#endif
100#ifndef __glibcpp_wchar_t_bits
101#define __glibcpp_wchar_t_bits 32
102#endif
103#ifndef __glibcpp_wchar_t_is_signed
104#define __glibcpp_wchar_t_is_signed true
105#endif
106#ifndef __glibcpp_long_long_bits
107#define __glibcpp_long_long_bits 64
108#endif
109#ifndef __glibcpp_float_bits
110#define __glibcpp_float_bits 32
111#endif
112#ifndef __glibcpp_double_bits
113#define __glibcpp_double_bits 64
114#endif
115#ifndef __glibcpp_long_double_bits
116#define __glibcpp_long_double_bits 128
117#endif
118
119#ifndef __glibcpp_char_traps
120#define __glibcpp_char_traps true
121#endif
122#ifndef __glibcpp_short_traps
123#define __glibcpp_short_traps true
124#endif
125#ifndef __glibcpp_int_traps
126#define __glibcpp_int_traps true
127#endif
128#ifndef __glibcpp_long_traps
129#define __glibcpp_long_traps true
130#endif
131#ifndef __glibcpp_wchar_t_traps
132#define __glibcpp_wchar_t_traps true
133#endif
134#ifndef __glibcpp_long_long_traps
135#define __glibcpp_long_long_traps true
136#endif
137
138// You should not need to define any macros below this point, unless
139// you have a machine with non-standard bit-widths.
140
141// These values are the minimums and maximums for standard data types
142// of common widths.
143
144#define __glibcpp_s8_max 127
145#define __glibcpp_s8_min (-__glibcpp_s8_max - 1)
146#define __glibcpp_s8_digits 7
147#define __glibcpp_s8_digits10 2
148#define __glibcpp_u8_min 0U
149#define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1)
150#define __glibcpp_u8_digits 8
151#define __glibcpp_u8_digits10 2
152#define __glibcpp_s16_max 32767
153#define __glibcpp_s16_min (-__glibcpp_s16_max - 1)
154#define __glibcpp_s16_digits 15
155#define __glibcpp_s16_digits10 4
156#define __glibcpp_u16_min 0U
157#define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1)
158#define __glibcpp_u16_digits 16
159#define __glibcpp_u16_digits10 4
160#define __glibcpp_s32_max 2147483647L
161#define __glibcpp_s32_min (-__glibcpp_s32_max - 1)
162#define __glibcpp_s32_digits 31
163#define __glibcpp_s32_digits10 9
164#define __glibcpp_u32_min 0UL
165#define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1)
166#define __glibcpp_u32_digits 32
167#define __glibcpp_u32_digits10 9
168#define __glibcpp_s64_max 9223372036854775807LL
169#define __glibcpp_s64_min (-__glibcpp_s64_max - 1)
170#define __glibcpp_s64_digits 63
171#define __glibcpp_s64_digits10 18
172#define __glibcpp_u64_min 0ULL
173#define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1)
174#define __glibcpp_u64_digits 64
175#define __glibcpp_u64_digits10 19
176
177#define __glibcpp_f32_min 1.17549435e-38F
178#define __glibcpp_f32_max 3.40282347e+38F
179#define __glibcpp_f32_digits 24
180#define __glibcpp_f32_digits10 6
181#define __glibcpp_f32_radix 2
182#define __glibcpp_f32_epsilon 1.19209290e-07F
183#define __glibcpp_f32_round_error 1.0F
184#define __glibcpp_f32_min_exponent -125
185#define __glibcpp_f32_min_exponent10 -37
186#define __glibcpp_f32_max_exponent 128
187#define __glibcpp_f32_max_exponent10 38
188#define __glibcpp_f64_min 2.2250738585072014e-308
189#define __glibcpp_f64_max 1.7976931348623157e+308
190#define __glibcpp_f64_digits 53
191#define __glibcpp_f64_digits10 15
192#define __glibcpp_f64_radix 2
193#define __glibcpp_f64_epsilon 2.2204460492503131e-16
194#define __glibcpp_f64_round_error 1.0
195#define __glibcpp_f64_min_exponent -1021
196#define __glibcpp_f64_min_exponent10 -307
197#define __glibcpp_f64_max_exponent 1024
198#define __glibcpp_f64_max_exponent10 308
199#define __glibcpp_f80_min 3.36210314311209350626e-4932L
200#define __glibcpp_f80_max 1.18973149535723176502e+4932L
201#define __glibcpp_f80_digits 64
202#define __glibcpp_f80_digits10 18
203#define __glibcpp_f80_radix 2
204#define __glibcpp_f80_epsilon 1.08420217248550443401e-19L
205#define __glibcpp_f80_round_error 1.0L
206#define __glibcpp_f80_min_exponent -16381
207#define __glibcpp_f80_min_exponent10 -4931
208#define __glibcpp_f80_max_exponent 16384
209#define __glibcpp_f80_max_exponent10 4932
210#define __glibcpp_f96_min 1.68105157155604675313e-4932L
211#define __glibcpp_f96_max 1.18973149535723176502e+4932L
212#define __glibcpp_f96_digits 64
213#define __glibcpp_f96_digits10 18
214#define __glibcpp_f96_radix 2
215#define __glibcpp_f96_epsilon 1.08420217248550443401e-19L
216#define __glibcpp_f96_round_error 1.0L
217#define __glibcpp_f96_min_exponent -16382
218#define __glibcpp_f96_min_exponent10 -4931
219#define __glibcpp_f96_max_exponent 16384
220#define __glibcpp_f96_max_exponent10 4932
221#define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L
222#define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L
223#define __glibcpp_f128_digits 113
224#define __glibcpp_f128_digits10 33
225#define __glibcpp_f128_radix 2
226#define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L
227#define __glibcpp_f128_round_error 1.0L
228#define __glibcpp_f128_min_exponent -16381
229#define __glibcpp_f128_min_exponent10 -4931
230#define __glibcpp_f128_max_exponent 16384
231#define __glibcpp_f128_max_exponent10 4932
232
233// bool-specific hooks:
234//     __glibcpp_bool_digits  __glibcpp_int_traps __glibcpp_long_traps
235
236#ifndef __glibcpp_bool_digits
237#define __glibcpp_bool_digits 1
238#endif
239
240// char.
241
242#define __glibcpp_plain_char_traps true
243#define __glibcpp_signed_char_traps true
244#define __glibcpp_unsigned_char_traps true
245#ifndef __glibcpp_char_is_modulo
246#define __glibcpp_char_is_modulo true
247#endif
248#ifndef __glibcpp_signed_char_is_modulo
249#define __glibcpp_signed_char_is_modulo true
250#endif
251#if __glibcpp_char_bits == 8
252#define __glibcpp_signed_char_min __glibcpp_s8_min
253#define __glibcpp_signed_char_max __glibcpp_s8_max
254#define __glibcpp_signed_char_digits __glibcpp_s8_digits
255#define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10
256#define __glibcpp_unsigned_char_min __glibcpp_u8_min
257#define __glibcpp_unsigned_char_max __glibcpp_u8_max
258#define __glibcpp_unsigned_char_digits __glibcpp_u8_digits
259#define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10
260#elif __glibcpp_char_bits == 16
261#define __glibcpp_signed_char_min __glibcpp_s16_min
262#define __glibcpp_signed_char_max __glibcpp_s16_max
263#define __glibcpp_signed_char_digits __glibcpp_s16_digits
264#define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10
265#define __glibcpp_unsigned_char_min __glibcpp_u16_min
266#define __glibcpp_unsigned_char_max __glibcpp_u16_max
267#define __glibcpp_unsigned_char_digits __glibcpp_u16_digits
268#define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10
269#elif __glibcpp_char_bits == 32
270#define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min
271#define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max
272#define __glibcpp_signed_char_digits __glibcpp_s32_digits
273#define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10
274#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min
275#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max
276#define __glibcpp_unsigned_char_digits __glibcpp_u32_digits
277#define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10
278#elif __glibcpp_char_bits == 64
279#define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min
280#define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max
281#define __glibcpp_signed_char_digits __glibcpp_s64_digits
282#define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10
283#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min
284#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max
285#define __glibcpp_unsigned_char_digits __glibcpp_u64_digits
286#define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10
287#else
288// You must define these macros in the configuration file.
289#endif
290
291#if __glibcpp_plain_char_is_signed
292#define __glibcpp_char_min (char)__glibcpp_signed_char_min
293#define __glibcpp_char_max (char)__glibcpp_signed_char_max
294#define __glibcpp_char_digits __glibcpp_signed_char_digits
295#define __glibcpp_char_digits10 __glibcpp_signed_char_digits
296#else
297#define __glibcpp_char_min (char)__glibcpp_unsigned_char_min
298#define __glibcpp_char_max (char)__glibcpp_unsigned_char_max
299#define __glibcpp_char_digits __glibcpp_unsigned_char_digits
300#define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits
301#endif
302
303// short
304
305#define __glibcpp_signed_short_traps true
306#define __glibcpp_unsigned_short_traps true
307#ifndef __glibcpp_signed_short_is_modulo
308#define __glibcpp_signed_short_is_modulo true
309#endif
310#if __glibcpp_short_bits == 8
311#define __glibcpp_signed_short_min __glibcpp_s8_min
312#define __glibcpp_signed_short_max __glibcpp_s8_max
313#define __glibcpp_signed_short_digits __glibcpp_s8_digits
314#define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10
315#define __glibcpp_unsigned_short_min __glibcpp_u8_min
316#define __glibcpp_unsigned_short_max __glibcpp_u8_max
317#define __glibcpp_unsigned_short_digits __glibcpp_u8_digits
318#define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10
319#elif __glibcpp_short_bits == 16
320#define __glibcpp_signed_short_min __glibcpp_s16_min
321#define __glibcpp_signed_short_max __glibcpp_s16_max
322#define __glibcpp_signed_short_digits __glibcpp_s16_digits
323#define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10
324#define __glibcpp_unsigned_short_min __glibcpp_u16_min
325#define __glibcpp_unsigned_short_max __glibcpp_u16_max
326#define __glibcpp_unsigned_short_digits __glibcpp_u16_digits
327#define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10
328#elif __glibcpp_short_bits == 32
329#define __glibcpp_signed_short_min (short)__glibcpp_s32_min
330#define __glibcpp_signed_short_max (short)__glibcpp_s32_max
331#define __glibcpp_signed_short_digits __glibcpp_s32_digits
332#define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10
333#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min
334#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max
335#define __glibcpp_unsigned_short_digits __glibcpp_u32_digits
336#define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10
337#elif __glibcpp_short_bits == 64
338#define __glibcpp_signed_short_min (short)__glibcpp_s64_min
339#define __glibcpp_signed_short_max (short)__glibcpp_s64_max
340#define __glibcpp_signed_short_digits __glibcpp_s64_digits
341#define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10
342#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min
343#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max
344#define __glibcpp_unsigned_short_digits __glibcpp_u64_digits
345#define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10
346#else
347// You must define these macros in the configuration file.
348#endif
349
350// int
351
352#define __glibcpp_signed_int_traps true
353#define __glibcpp_unsigned_int_traps true
354#ifndef __glibcpp_signed_int_is_modulo
355#define __glibcpp_signed_int_is_modulo true
356#endif
357#if __glibcpp_int_bits == 8
358#define __glibcpp_signed_int_min __glibcpp_s8_min
359#define __glibcpp_signed_int_max __glibcpp_s8_max
360#define __glibcpp_signed_int_digits __glibcpp_s8_digits
361#define __glibcpp_signed_int_digits10 __glibcpp_s8_digits10
362#define __glibcpp_unsigned_int_min __glibcpp_u8_min
363#define __glibcpp_unsigned_int_max __glibcpp_u8_max
364#define __glibcpp_unsigned_int_digits __glibcpp_u8_digits
365#define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10
366#elif __glibcpp_int_bits == 16
367#define __glibcpp_signed_int_min __glibcpp_s16_min
368#define __glibcpp_signed_int_max __glibcpp_s16_max
369#define __glibcpp_signed_int_digits __glibcpp_s16_digits
370#define __glibcpp_signed_int_digits10 __glibcpp_s16_digits10
371#define __glibcpp_unsigned_int_min __glibcpp_u16_min
372#define __glibcpp_unsigned_int_max __glibcpp_u16_max
373#define __glibcpp_unsigned_int_digits __glibcpp_u16_digits
374#define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10
375#elif __glibcpp_int_bits == 32
376#define __glibcpp_signed_int_min (int)__glibcpp_s32_min
377#define __glibcpp_signed_int_max (int)__glibcpp_s32_max
378#define __glibcpp_signed_int_digits __glibcpp_s32_digits
379#define __glibcpp_signed_int_digits10 __glibcpp_s32_digits10
380#define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u32_min
381#define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max
382#define __glibcpp_unsigned_int_digits __glibcpp_u32_digits
383#define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10
384#elif __glibcpp_int_bits == 64
385#define __glibcpp_signed_int_min (int)__glibcpp_s64_min
386#define __glibcpp_signed_int_max (int)__glibcpp_s64_max
387#define __glibcpp_signed_int_digits __glibcpp_s64_digits
388#define __glibcpp_signed_int_digits10 __glibcpp_s64_digits10
389#define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u64_min
390#define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u64_max
391#define __glibcpp_unsigned_int_digits __glibcpp_u64_digits
392#define __glibcpp_unsigned_int_digits10 __glibcpp_u64_digits10
393#else
394// You must define these macros in the configuration file.
395#endif
396
397// long
398
399#define __glibcpp_signed_long_traps true
400#define __glibcpp_unsigned_long_traps true
401#ifndef __glibcpp_signed_long_is_modulo
402#define __glibcpp_signed_long_is_modulo true
403#endif
404#if __glibcpp_long_bits == 8
405#define __glibcpp_signed_long_min __glibcpp_s8_min
406#define __glibcpp_signed_long_max __glibcpp_s8_max
407#define __glibcpp_signed_long_digits __glibcpp_s8_digits
408#define __glibcpp_signed_long_digits10 __glibcpp_s8_digits10
409#define __glibcpp_unsigned_long_min __glibcpp_u8_min
410#define __glibcpp_unsigned_long_max __glibcpp_u8_max
411#define __glibcpp_unsigned_long_digits __glibcpp_u8_digits
412#define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10
413#elif __glibcpp_long_bits == 16
414#define __glibcpp_signed_long_min __glibcpp_s16_min
415#define __glibcpp_signed_long_max __glibcpp_s16_max
416#define __glibcpp_signed_long_digits __glibcpp_s16_digits
417#define __glibcpp_signed_long_digits10 __glibcpp_s16_digits10
418#define __glibcpp_unsigned_long_min __glibcpp_u16_min
419#define __glibcpp_unsigned_long_max __glibcpp_u16_max
420#define __glibcpp_unsigned_long_digits __glibcpp_u16_digits
421#define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10
422#elif __glibcpp_long_bits == 32
423#define __glibcpp_signed_long_min __glibcpp_s32_min
424#define __glibcpp_signed_long_max __glibcpp_s32_max
425#define __glibcpp_signed_long_digits __glibcpp_s32_digits
426#define __glibcpp_signed_long_digits10 __glibcpp_s32_digits10
427#define __glibcpp_unsigned_long_min __glibcpp_u32_min
428#define __glibcpp_unsigned_long_max __glibcpp_u32_max
429#define __glibcpp_unsigned_long_digits __glibcpp_u32_digits
430#define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10
431#elif __glibcpp_long_bits == 64
432#define __glibcpp_signed_long_min (long)__glibcpp_s64_min
433#define __glibcpp_signed_long_max (long)__glibcpp_s64_max
434#define __glibcpp_signed_long_digits __glibcpp_s64_digits
435#define __glibcpp_signed_long_digits10 __glibcpp_s64_digits10
436#define __glibcpp_unsigned_long_min (unsigned long)__glibcpp_u64_min
437#define __glibcpp_unsigned_long_max (unsigned long)__glibcpp_u64_max
438#define __glibcpp_unsigned_long_digits __glibcpp_u64_digits
439#define __glibcpp_unsigned_long_digits10 __glibcpp_u64_digits10
440#else
441// You must define these macros in the configuration file.
442#endif
443
444// long long
445
446#define __glibcpp_signed_long_long_traps true
447#define __glibcpp_signed_long_long_traps true
448#ifndef __glibcpp_signed_long_long_is_modulo
449#define __glibcpp_signed_long_long_is_modulo true
450#endif
451#if __glibcpp_long_long_bits == 8
452#define __glibcpp_signed_long_long_min __glibcpp_s8_min
453#define __glibcpp_signed_long_long_max __glibcpp_s8_max
454#define __glibcpp_signed_long_long_digits __glibcpp_s8_digits
455#define __glibcpp_signed_long_long_digits10 __glibcpp_s8_digits10
456#define __glibcpp_unsigned_long_long_min __glibcpp_u8_min
457#define __glibcpp_unsigned_long_long_max __glibcpp_u8_max
458#define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits
459#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10
460#elif __glibcpp_long_long_bits == 16
461#define __glibcpp_signed_long_long_min __glibcpp_s16_min
462#define __glibcpp_signed_long_long_max __glibcpp_s16_max
463#define __glibcpp_signed_long_long_digits __glibcpp_s16_digits
464#define __glibcpp_signed_long_long_digits10 __glibcpp_s16_digits10
465#define __glibcpp_unsigned_long_long_min __glibcpp_u16_min
466#define __glibcpp_unsigned_long_long_max __glibcpp_u16_max
467#define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits
468#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10
469#elif __glibcpp_long_long_bits == 32
470#define __glibcpp_signed_long_long_min __glibcpp_s32_min
471#define __glibcpp_signed_long_long_max __glibcpp_s32_max
472#define __glibcpp_signed_long_long_digits __glibcpp_s32_digits
473#define __glibcpp_signed_long_long_digits10 __glibcpp_s32_digits10
474#define __glibcpp_unsigned_long_long_min __glibcpp_u32_min
475#define __glibcpp_unsigned_long_long_max __glibcpp_u32_max
476#define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits
477#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10
478#elif __glibcpp_long_long_bits == 64
479#define __glibcpp_signed_long_long_min __glibcpp_s64_min
480#define __glibcpp_signed_long_long_max __glibcpp_s64_max
481#define __glibcpp_signed_long_long_digits __glibcpp_s64_digits
482#define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10
483#define __glibcpp_signed_long_long_traps true
484#define __glibcpp_unsigned_long_long_min __glibcpp_u64_min
485#define __glibcpp_unsigned_long_long_max __glibcpp_u64_max
486#define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits
487#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10
488#define __glibcpp_unsigned_long_long_traps true
489#else
490// You must define these macros in the configuration file.
491#endif
492
493// wchar_t
494
495#define __glibcpp_wchar_t_traps true
496#ifndef __glibcpp_wchar_t_is_modulo
497#define __glibcpp_wchar_t_is_modulo true
498#endif
499#if __glibcpp_wchar_t_is_signed
500#if __glibcpp_wchar_t_bits == 8
501#define __glibcpp_wchar_t_min __glibcpp_s8_min
502#define __glibcpp_wchar_t_max __glibcpp_s8_max
503#define __glibcpp_wchar_t_digits __glibcpp_s8_digits
504#define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10
505#elif __glibcpp_wchar_t_bits == 16
506#define __glibcpp_wchar_t_min __glibcpp_s16_min
507#define __glibcpp_wchar_t_max __glibcpp_s16_max
508#define __glibcpp_wchar_t_digits __glibcpp_s16_digits
509#define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10
510#elif __glibcpp_wchar_t_bits == 32
511#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min
512#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max
513#define __glibcpp_wchar_t_digits __glibcpp_s32_digits
514#define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10
515#elif __glibcpp_wchar_t_bits == 64
516#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min
517#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max
518#define __glibcpp_wchar_t_digits __glibcpp_s64_digits
519#define __glibcpp_wchar_t_digits10 __glibcpp_s64_digits10
520#else
521// You must define these macros in the configuration file.
522#endif
523#else
524#if __glibcpp_wchar_t_bits == 8
525#define __glibcpp_wchar_t_min __glibcpp_u8_min
526#define __glibcpp_wchar_t_max __glibcpp_u8_max
527#define __glibcpp_wchar_t_digits __glibcpp_u8_digits
528#define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10
529#elif __glibcpp_wchar_t_bits == 16
530#define __glibcpp_wchar_t_min __glibcpp_u16_min
531#define __glibcpp_wchar_t_max __glibcpp_u16_max
532#define __glibcpp_wchar_t_digits __glibcpp_u16_digits
533#define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10
534#elif __glibcpp_wchar_t_bits == 32
535#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min
536#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max
537#define __glibcpp_wchar_t_digits __glibcpp_u32_digits
538#define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10
539#elif __glibcpp_wchar_t_bits == 64
540#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min
541#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max
542#define __glibcpp_wchar_t_digits __glibcpp_u64_digits
543#define __glibcpp_wchar_t_digits10 __glibcpp_u64_digits10
544#else
545// You must define these macros in the configuration file.
546#endif
547#endif
548
549// float
550//
551
552#if __glibcpp_float_bits == 32
553#define __glibcpp_float_min __glibcpp_f32_min
554#define __glibcpp_float_max __glibcpp_f32_max
555#define __glibcpp_float_digits __glibcpp_f32_digits
556#define __glibcpp_float_digits10 __glibcpp_f32_digits10
557#define __glibcpp_float_radix __glibcpp_f32_radix
558#define __glibcpp_float_epsilon __glibcpp_f32_epsilon
559#define __glibcpp_float_round_error __glibcpp_f32_round_error
560#define __glibcpp_float_min_exponent __glibcpp_f32_min_exponent
561#define __glibcpp_float_min_exponent10 __glibcpp_f32_min_exponent10
562#define __glibcpp_float_max_exponent __glibcpp_f32_max_exponent
563#define __glibcpp_float_max_exponent10 __glibcpp_f32_max_exponent10
564#elif __glibcpp_float_bits == 64
565#define __glibcpp_float_min __glibcpp_f64_min
566#define __glibcpp_float_max __glibcpp_f64_max
567#define __glibcpp_float_digits __glibcpp_f64_digits
568#define __glibcpp_float_digits10 __glibcpp_f64_digits10
569#define __glibcpp_float_radix __glibcpp_f64_radix
570#define __glibcpp_float_epsilon __glibcpp_f64_epsilon
571#define __glibcpp_float_round_error __glibcpp_f64_round_error
572#define __glibcpp_float_min_exponent __glibcpp_f64_min_exponent
573#define __glibcpp_float_min_exponent10 __glibcpp_f64_min_exponent10
574#define __glibcpp_float_max_exponent __glibcpp_f64_max_exponent
575#define __glibcpp_float_max_exponent10 __glibcpp_f64_max_exponent10
576#elif __glibcpp_float_bits == 80
577#define __glibcpp_float_min __glibcpp_f80_min
578#define __glibcpp_float_max __glibcpp_f80_max
579#define __glibcpp_float_digits __glibcpp_f80_digits
580#define __glibcpp_float_digits10 __glibcpp_f80_digits10
581#define __glibcpp_float_radix __glibcpp_f80_radix
582#define __glibcpp_float_epsilon __glibcpp_f80_epsilon
583#define __glibcpp_float_round_error __glibcpp_f80_round_error
584#define __glibcpp_float_min_exponent __glibcpp_f80_min_exponent
585#define __glibcpp_float_min_exponent10 __glibcpp_f80_min_exponent10
586#define __glibcpp_float_max_exponent __glibcpp_f80_max_exponent
587#define __glibcpp_float_max_exponent10 __glibcpp_f80_max_exponent10
588#else
589// You must define these macros in the configuration file.
590#endif
591
592// FIXME: These are just stubs and inkorrect
593
594#ifndef __glibcpp_float_has_infinity
595#define __glibcpp_float_has_infinity false
596#endif
597
598#ifndef __glibcpp_float_has_quiet_NaN
599#define __glibcpp_float_has_quiet_NaN false
600#endif
601
602#ifndef __glibcpp_float_has_signaling_NaN
603#define __glibcpp_float_has_signaling_NaN false
604#endif
605
606#ifndef __glibcpp_float_has_denorm
607#define __glibcpp_float_has_denorm denorm_absent
608#endif
609
610#ifndef __glibcpp_float_has_denorm_loss
611#define __glibcpp_float_has_denorm_loss false
612#endif
613
614#ifndef __glibcpp_float_infinity
615#define __glibcpp_float_infinity 0.0F
616#endif
617
618#ifndef __glibcpp_float_quiet_NaN
619#define __glibcpp_float_quiet_NaN 0.0F
620#endif
621
622#ifndef __glibcpp_float_signaling_NaN
623#define __glibcpp_float_signaling_NaN 0.0F
624#endif
625
626#ifndef __glibcpp_float_denorm_min
627#define __glibcpp_float_denorm_min 0.0F
628#endif
629
630#ifndef __glibcpp_float_is_iec559
631#define __glibcpp_float_is_iec559 false
632#endif
633
634#ifndef __glibcpp_float_is_bounded
635#define __glibcpp_float_is_bounded true
636#endif
637
638#ifndef __glibcpp_float_is_modulo
639#define __glibcpp_float_is_modulo false
640#endif
641
642#ifndef __glibcpp_float_traps
643#define __glibcpp_float_traps false
644#endif
645
646#ifndef __glibcpp_float_tinyness_before
647#define __glibcpp_float_tinyness_before false
648#endif
649
650#ifndef __glibcpp_float_round_style
651#define __glibcpp_float_round_style round_toward_zero
652#endif
653
654// double
655
656#if __glibcpp_double_bits == 32
657#define __glibcpp_double_min __glibcpp_f32_min
658#define __glibcpp_double_max __glibcpp_f32_max
659#define __glibcpp_double_digits __glibcpp_f32_digits
660#define __glibcpp_double_digits10 __glibcpp_f32_digits10
661#define __glibcpp_double_radix __glibcpp_f32_radix
662#define __glibcpp_double_epsilon __glibcpp_f32_epsilon
663#define __glibcpp_double_round_error __glibcpp_f32_round_error
664#define __glibcpp_double_min_exponent __glibcpp_f32_min_exponent
665#define __glibcpp_double_min_exponent10 __glibcpp_f32_min_exponent10
666#define __glibcpp_double_max_exponent __glibcpp_f32_max_exponent
667#define __glibcpp_double_max_exponent10 __glibcpp_f32_max_exponent10
668#elif __glibcpp_double_bits == 64
669#define __glibcpp_double_min __glibcpp_f64_min
670#define __glibcpp_double_max __glibcpp_f64_max
671#define __glibcpp_double_digits __glibcpp_f64_digits
672#define __glibcpp_double_digits10 __glibcpp_f64_digits10
673#define __glibcpp_double_radix __glibcpp_f64_radix
674#define __glibcpp_double_epsilon __glibcpp_f64_epsilon
675#define __glibcpp_double_round_error __glibcpp_f64_round_error
676#define __glibcpp_double_min_exponent __glibcpp_f64_min_exponent
677#define __glibcpp_double_min_exponent10 __glibcpp_f64_min_exponent10
678#define __glibcpp_double_max_exponent __glibcpp_f64_max_exponent
679#define __glibcpp_double_max_exponent10 __glibcpp_f64_max_exponent10
680#elif __glibcpp_double_bits == 80
681#define __glibcpp_double_min __glibcpp_f80_min
682#define __glibcpp_double_max __glibcpp_f80_max
683#define __glibcpp_double_digits __glibcpp_f80_digits
684#define __glibcpp_double_digits10 __glibcpp_f80_digits10
685#define __glibcpp_double_radix __glibcpp_f80_radix
686#define __glibcpp_double_epsilon __glibcpp_f80_epsilon
687#define __glibcpp_double_round_error __glibcpp_f80_round_error
688#define __glibcpp_double_min_exponent __glibcpp_f80_min_exponent
689#define __glibcpp_double_min_exponent10 __glibcpp_f80_min_exponent10
690#define __glibcpp_double_max_exponent __glibcpp_f80_max_exponent
691#define __glibcpp_double_max_exponent10 __glibcpp_f80_max_exponent10
692#else
693// You must define these macros in the configuration file.
694#endif
695
696// FIXME: These are just stubs and inkorrect
697
698#ifndef __glibcpp_double_has_infinity
699#define __glibcpp_double_has_infinity false
700#endif
701
702#ifndef __glibcpp_double_has_quiet_NaN
703#define __glibcpp_double_has_quiet_NaN false
704#endif
705
706#ifndef __glibcpp_double_has_signaling_NaN
707#define __glibcpp_double_has_signaling_NaN false
708#endif
709
710#ifndef __glibcpp_double_has_denorm
711#define __glibcpp_double_has_denorm denorm_absent
712#endif
713
714#ifndef __glibcpp_double_has_denorm_loss
715#define __glibcpp_double_has_denorm_loss false
716#endif
717
718#ifndef __glibcpp_double_infinity
719#define __glibcpp_double_infinity 0.0
720#endif
721
722#ifndef __glibcpp_double_quiet_NaN
723#define __glibcpp_double_quiet_NaN 0.0
724#endif
725
726#ifndef __glibcpp_double_signaling_NaN
727#define __glibcpp_double_signaling_NaN 0.0
728#endif
729
730#ifndef __glibcpp_double_denorm_min
731#define __glibcpp_double_denorm_min 0.0
732#endif
733
734#ifndef __glibcpp_double_is_iec559
735#define __glibcpp_double_is_iec559 false
736#endif
737
738#ifndef __glibcpp_double_is_bounded
739#define __glibcpp_double_is_bounded true
740#endif
741
742#ifndef __glibcpp_double_is_modulo
743#define __glibcpp_double_is_modulo false
744#endif
745
746#ifndef __glibcpp_double_traps
747#define __glibcpp_double_traps false
748#endif
749
750#ifndef __glibcpp_double_tinyness_before
751#define __glibcpp_double_tinyness_before false
752#endif
753
754#ifndef __glibcpp_double_round_style
755#define __glibcpp_double_round_style round_toward_zero
756#endif
757
758// long double
759
760#if __glibcpp_long_double_bits == 32
761#define __glibcpp_long_double_min __glibcpp_f32_min
762#define __glibcpp_long_double_max __glibcpp_f32_max
763#define __glibcpp_long_double_digits __glibcpp_f32_digits
764#define __glibcpp_long_double_digits10 __glibcpp_f32_digits10
765#define __glibcpp_long_double_radix __glibcpp_f32_radix
766#define __glibcpp_long_double_epsilon __glibcpp_f32_epsilon
767#define __glibcpp_long_double_round_error __glibcpp_f32_round_error
768#define __glibcpp_long_double_min_exponent __glibcpp_f32_min_exponent
769#define __glibcpp_long_double_min_exponent10 __glibcpp_f32_min_exponent10
770#define __glibcpp_long_double_max_exponent __glibcpp_f32_max_exponent
771#define __glibcpp_long_double_max_exponent10 __glibcpp_f32_max_exponent10
772#elif __glibcpp_long_double_bits == 64
773#define __glibcpp_long_double_min __glibcpp_f64_min
774#define __glibcpp_long_double_max __glibcpp_f64_max
775#define __glibcpp_long_double_digits __glibcpp_f64_digits
776#define __glibcpp_long_double_digits10 __glibcpp_f64_digits10
777#define __glibcpp_long_double_radix __glibcpp_f64_radix
778#define __glibcpp_long_double_epsilon __glibcpp_f64_epsilon
779#define __glibcpp_long_double_round_error __glibcpp_f64_round_error
780#define __glibcpp_long_double_min_exponent __glibcpp_f64_min_exponent
781#define __glibcpp_long_double_min_exponent10 __glibcpp_f64_min_exponent10
782#define __glibcpp_long_double_max_exponent __glibcpp_f64_max_exponent
783#define __glibcpp_long_double_max_exponent10 __glibcpp_f64_max_exponent10
784#elif __glibcpp_long_double_bits == 80
785#define __glibcpp_long_double_min __glibcpp_f80_min
786#define __glibcpp_long_double_max __glibcpp_f80_max
787#define __glibcpp_long_double_digits __glibcpp_f80_digits
788#define __glibcpp_long_double_digits10 __glibcpp_f80_digits10
789#define __glibcpp_long_double_radix __glibcpp_f80_radix
790#define __glibcpp_long_double_epsilon __glibcpp_f80_epsilon
791#define __glibcpp_long_double_round_error __glibcpp_f80_round_error
792#define __glibcpp_long_double_min_exponent __glibcpp_f80_min_exponent
793#define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10
794#define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent
795#define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10
796#elif __glibcpp_long_double_bits == 96
797#define __glibcpp_long_double_min __glibcpp_f96_min
798#define __glibcpp_long_double_max __glibcpp_f96_max
799#define __glibcpp_long_double_digits __glibcpp_f96_digits
800#define __glibcpp_long_double_digits10 __glibcpp_f96_digits10
801#define __glibcpp_long_double_radix __glibcpp_f96_radix
802#define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon
803#define __glibcpp_long_double_round_error __glibcpp_f96_round_error
804#define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent
805#define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10
806#define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent
807#define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10
808#elif __glibcpp_long_double_bits == 128
809#define __glibcpp_long_double_min __glibcpp_f128_min
810#define __glibcpp_long_double_max __glibcpp_f128_max
811#define __glibcpp_long_double_digits __glibcpp_f128_digits
812#define __glibcpp_long_double_digits10 __glibcpp_f128_digits10
813#define __glibcpp_long_double_radix __glibcpp_f128_radix
814#define __glibcpp_long_double_epsilon __glibcpp_f128_epsilon
815#define __glibcpp_long_double_round_error __glibcpp_f128_round_error
816#define __glibcpp_long_double_min_exponent __glibcpp_f128_min_exponent
817#define __glibcpp_long_double_min_exponent10 __glibcpp_f128_min_exponent10
818#define __glibcpp_long_double_max_exponent __glibcpp_f128_max_exponent
819#define __glibcpp_long_double_max_exponent10 __glibcpp_f128_max_exponent10
820#else
821// You must define these macros in the configuration file.
822#endif
823
824// FIXME: These are just stubs and inkorrect
825
826#ifndef __glibcpp_long_double_has_infinity
827#define __glibcpp_long_double_has_infinity false
828#endif
829
830#ifndef __glibcpp_long_double_has_quiet_NaN
831#define __glibcpp_long_double_has_quiet_NaN false
832#endif
833
834#ifndef __glibcpp_long_double_has_signaling_NaN
835#define __glibcpp_long_double_has_signaling_NaN false
836#endif
837
838#ifndef __glibcpp_long_double_has_denorm
839#define __glibcpp_long_double_has_denorm denorm_absent
840#endif
841
842#ifndef __glibcpp_long_double_has_denorm_loss
843#define __glibcpp_long_double_has_denorm_loss false
844#endif
845
846#ifndef __glibcpp_long_double_infinity
847#define __glibcpp_long_double_infinity 0.0L
848#endif
849
850#ifndef __glibcpp_long_double_quiet_NaN
851#define __glibcpp_long_double_quiet_NaN 0.0L
852#endif
853
854#ifndef __glibcpp_long_double_signaling_NaN
855#define __glibcpp_long_double_signaling_NaN 0.0L
856#endif
857
858#ifndef __glibcpp_long_double_denorm_min
859#define __glibcpp_long_double_denorm_min 0.0L
860#endif
861
862#ifndef __glibcpp_long_double_is_iec559
863#define __glibcpp_long_double_is_iec559 false
864#endif
865
866#ifndef __glibcpp_long_double_is_bounded
867#define __glibcpp_long_double_is_bounded true
868#endif
869
870#ifndef __glibcpp_long_double_is_modulo
871#define __glibcpp_long_double_is_modulo false
872#endif
873
874#ifndef __glibcpp_long_double_traps
875#define __glibcpp_long_double_traps false
876#endif
877
878#ifndef __glibcpp_long_double_tinyness_before
879#define __glibcpp_long_double_tinyness_before false
880#endif
881
882#ifndef __glibcpp_long_double_round_style
883#define __glibcpp_long_double_round_style round_toward_zero
884#endif
885
886
887namespace std
888{
889  enum float_round_style
890  {
891    round_indeterminate       = -1,
892    round_toward_zero         = 0,
893    round_to_nearest          = 1,
894    round_toward_infinity     = 2,
895    round_toward_neg_infinity = 3
896  };
897
898  enum float_denorm_style
899  {
900    denorm_indeterminate = -1,
901    denorm_absent        = 0,
902    denorm_present       = 1
903  };
904
905  //
906  // The primary class traits
907  //
908  struct __numeric_limits_base
909  {
910    static const bool is_specialized = false;
911
912    static const int digits = 0;
913    static const int digits10 = 0;
914    static const bool is_signed = false;
915    static const bool is_integer = false;
916    static const bool is_exact = false;
917    static const int radix = 0;
918
919    static const int min_exponent = 0;
920    static const int min_exponent10 = 0;
921    static const int max_exponent = 0;
922    static const int max_exponent10 = 0;
923
924    static const bool has_infinity = false;
925    static const bool has_quiet_NaN = false;
926    static const bool has_signaling_NaN = false;
927    static const float_denorm_style has_denorm = denorm_absent;
928    static const bool has_denorm_loss = false;
929
930    static const bool is_iec559 = false;
931    static const bool is_bounded = false;
932    static const bool is_modulo = false;
933
934    static const bool traps = false;
935    static const bool tinyness_before = false;
936    static const float_round_style round_style = round_toward_zero;
937  };
938
939  template<typename _Tp>
940    struct numeric_limits : public __numeric_limits_base
941    {
942      static _Tp min() throw() { return static_cast<_Tp>(0); }
943      static _Tp max() throw() { return static_cast<_Tp>(0); }
944      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
945      static _Tp round_error() throw() { return static_cast<_Tp>(0); }
946      static _Tp infinity() throw()  { return static_cast<_Tp>(0); }
947      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
948      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
949      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
950    };
951
952  // Now there follow 15 explicit specializations.  Yes, 15.  Make sure
953  // you get the count right.
954  template<>
955    struct numeric_limits<bool>
956    {
957      static const bool is_specialized = true;
958
959      static bool min() throw()
960      { return false; }
961
962      static bool max() throw()
963      { return true; }
964
965      static const int digits = __glibcpp_bool_digits;
966      static const int digits10 = 0;
967      static const bool is_signed = false;
968      static const bool is_integer = true;
969      static const bool is_exact = true;
970      static const int radix = 2;
971      static bool epsilon() throw()
972      { return false; }
973      static bool round_error() throw()
974      { return false; }
975
976      static const int min_exponent = 0;
977      static const int min_exponent10 = 0;
978      static const int max_exponent = 0;
979      static const int max_exponent10 = 0;
980
981      static const bool has_infinity = false;
982      static const bool has_quiet_NaN = false;
983      static const bool has_signaling_NaN = false;
984      static const float_denorm_style has_denorm = denorm_absent;
985      static const bool has_denorm_loss = false;
986
987      static bool infinity() throw()
988      { return false; }
989      static bool quiet_NaN() throw()
990      { return false; }
991      static bool signaling_NaN() throw()
992      { return false; }
993      static bool denorm_min() throw()
994      { return false; }
995
996      static const bool is_iec559 = false;
997      static const bool is_bounded = true;
998      static const bool is_modulo = false;
999
1000      // It is not clear what it means for a boolean type to trap.
1001      // This is a DR on the LWG issue list.  Here, I use integer
1002      // promotion semantics.
1003      static const bool traps = __glibcpp_signed_int_traps
1004               || __glibcpp_signed_long_traps;
1005      static const bool tinyness_before = false;
1006      static const float_round_style round_style = round_toward_zero;
1007    };
1008
1009#undef __glibcpp_bool_digits
1010
1011  template<>
1012    struct numeric_limits<char>
1013    {
1014      static const bool is_specialized = true;
1015
1016      static char min() throw()
1017      { return __glibcpp_char_min; }
1018      static char max() throw()
1019      { return __glibcpp_char_max; }
1020
1021      static const int digits = __glibcpp_char_digits;
1022      static const int digits10 = __glibcpp_char_digits10;
1023      static const bool is_signed = __glibcpp_plain_char_is_signed;
1024      static const bool is_integer = true;
1025      static const bool is_exact = true;
1026      static const int radix = 2;
1027      static char epsilon() throw()
1028      { return char(); }
1029      static char round_error() throw()
1030      { return char(); }
1031
1032      static const int min_exponent = 0;
1033      static const int min_exponent10 = 0;
1034      static const int max_exponent = 0;
1035      static const int max_exponent10 = 0;
1036
1037      static const bool has_infinity = false;
1038      static const bool has_quiet_NaN = false;
1039      static const bool has_signaling_NaN = false;
1040      static const float_denorm_style has_denorm = denorm_absent;
1041      static const bool has_denorm_loss = false;
1042
1043      static char infinity() throw()
1044      { return char(); }
1045      static char quiet_NaN() throw()
1046      { return char(); }
1047      static char signaling_NaN() throw()
1048      { return char(); }
1049      static char denorm_min() throw()
1050      { return static_cast<char>(0); }
1051
1052      static const bool is_iec559 = false;
1053      static const bool is_bounded = true;
1054      static const bool is_modulo = __glibcpp_char_is_modulo;
1055
1056      static const bool traps = __glibcpp_char_traps;
1057      static const bool tinyness_before = false;
1058      static const float_round_style round_style = round_toward_zero;
1059    };
1060
1061#undef __glibcpp_char_min
1062#undef __glibcpp_char_max
1063#undef __glibcpp_char_digits
1064#undef __glibcpp_char_digits10
1065#undef __glibcpp_char_is_signed
1066#undef __glibcpp_char_is_modulo
1067#undef __glibcpp_char_traps
1068
1069
1070
1071  template<>
1072    struct numeric_limits<signed char>
1073    {
1074      static const bool is_specialized = true;
1075
1076      static signed char min() throw()
1077      { return __glibcpp_signed_char_min; }
1078      static signed char max() throw()
1079      { return __glibcpp_signed_char_max; }
1080
1081      static const int digits = __glibcpp_signed_char_digits;
1082      static const int digits10 = __glibcpp_signed_char_digits10;
1083      static const bool is_signed = true;
1084      static const bool is_integer = true;
1085      static const bool is_exact = true;
1086      static const int radix = 2;
1087      static signed char epsilon() throw()
1088      { return 0; }
1089      static signed char round_error() throw()
1090      { return 0; }
1091
1092      static const int min_exponent = 0;
1093      static const int min_exponent10 = 0;
1094      static const int max_exponent = 0;
1095      static const int max_exponent10 = 0;
1096
1097      static const bool has_infinity = false;
1098      static const bool has_quiet_NaN = false;
1099      static const bool has_signaling_NaN = false;
1100      static const float_denorm_style has_denorm = denorm_absent;
1101      static const bool has_denorm_loss = false;
1102
1103      static signed char infinity() throw()
1104      { return static_cast<signed char>(0); }
1105      static signed char quiet_NaN() throw()
1106      { return static_cast<signed char>(0); }
1107      static signed char signaling_NaN() throw()
1108      { return static_cast<signed char>(0); }
1109      static signed char denorm_min() throw()
1110      { return static_cast<signed char>(0); }
1111
1112      static const bool is_iec559 = false;
1113      static const bool is_bounded = true;
1114      static const bool is_modulo = __glibcpp_signed_char_is_modulo;
1115
1116      static const bool traps = __glibcpp_signed_char_traps;
1117      static const bool tinyness_before = false;
1118      static const float_round_style round_style = round_toward_zero;
1119    };
1120
1121#undef __glibcpp_signed_char_min
1122#undef __glibcpp_signed_char_max
1123#undef __glibcpp_signed_char_digits
1124#undef __glibcpp_signed_char_digits10
1125#undef __glibcpp_signed_char_is_modulo
1126#undef __glibcpp_signed_char_traps
1127
1128  template<>
1129    struct numeric_limits<unsigned char>
1130    {
1131      static const bool is_specialized = true;
1132
1133      static unsigned char min() throw()
1134      { return 0; }
1135      static unsigned char max() throw()
1136      { return __glibcpp_unsigned_char_max; }
1137
1138      static const int digits = __glibcpp_unsigned_char_digits;
1139      static const int digits10 = __glibcpp_unsigned_char_digits10;
1140      static const bool is_signed = false;
1141      static const bool is_integer = true;
1142      static const bool is_exact = true;
1143      static const int radix = 2;
1144      static unsigned char epsilon() throw()
1145      { return 0; }
1146      static unsigned char round_error() throw()
1147      { return 0; }
1148
1149      static const int min_exponent = 0;
1150      static const int min_exponent10 = 0;
1151      static const int max_exponent = 0;
1152      static const int max_exponent10 = 0;
1153
1154      static const bool has_infinity = false;
1155      static const bool has_quiet_NaN = false;
1156      static const bool has_signaling_NaN = false;
1157      static const float_denorm_style has_denorm = denorm_absent;
1158      static const bool has_denorm_loss = false;
1159
1160      static unsigned char infinity() throw()
1161      { return static_cast<unsigned char>(0); }
1162      static unsigned char quiet_NaN() throw()
1163      { return static_cast<unsigned char>(0); }
1164      static unsigned char signaling_NaN() throw()
1165      { return static_cast<unsigned char>(0); }
1166      static unsigned char denorm_min() throw()
1167      { return static_cast<unsigned char>(0); }
1168
1169      static const bool is_iec559 = false;
1170      static const bool is_bounded = true;
1171      static const bool is_modulo = true;
1172
1173      static const bool traps = __glibcpp_unsigned_char_traps;
1174      static const bool tinyness_before = false;
1175      static const float_round_style round_style = round_toward_zero;
1176    };
1177
1178#undef __glibcpp_unsigned_char_max
1179#undef __glibcpp_unsigned_char_digits
1180#undef __glibcpp_unsigned_char_digits10
1181#undef __glibcpp_unsigned_char_traps
1182
1183  template<>
1184    struct numeric_limits<wchar_t>
1185    {
1186      static const bool is_specialized = true;
1187
1188      static wchar_t min() throw()
1189      { return __glibcpp_wchar_t_min; }
1190      static wchar_t max() throw()
1191      { return __glibcpp_wchar_t_max; }
1192
1193      static const int digits = __glibcpp_wchar_t_digits;
1194      static const int digits10 = __glibcpp_wchar_t_digits10;
1195      static const bool is_signed = __glibcpp_wchar_t_is_signed;
1196      static const bool is_integer = true;
1197      static const bool is_exact = true;
1198      static const int radix = 2;
1199      static wchar_t epsilon() throw()
1200      { return 0; }
1201      static wchar_t round_error() throw()
1202      { return 0; }
1203
1204      static const int min_exponent = 0;
1205      static const int min_exponent10 = 0;
1206      static const int max_exponent = 0;
1207      static const int max_exponent10 = 0;
1208
1209      static const bool has_infinity = false;
1210      static const bool has_quiet_NaN = false;
1211      static const bool has_signaling_NaN = false;
1212      static const float_denorm_style has_denorm = denorm_absent;
1213      static const bool has_denorm_loss = false;
1214
1215      static wchar_t infinity() throw()
1216      { return wchar_t(); }
1217      static wchar_t quiet_NaN() throw()
1218      { return wchar_t(); }
1219      static wchar_t signaling_NaN() throw()
1220      { return wchar_t(); }
1221      static wchar_t denorm_min() throw()
1222      { return wchar_t(); }
1223
1224      static const bool is_iec559 = false;
1225      static const bool is_bounded = true;
1226      static const bool is_modulo = __glibcpp_wchar_t_is_modulo;
1227
1228      static const bool traps = __glibcpp_wchar_t_traps;
1229      static const bool tinyness_before = false;
1230      static const float_round_style round_style = round_toward_zero;
1231    };
1232
1233#undef __glibcpp_wchar_t_min
1234#undef __glibcpp_wchar_t_max
1235#undef __glibcpp_wchar_t_digits
1236#undef __glibcpp_wchar_t_digits10
1237#undef __glibcpp_wchar_t_is_signed
1238#undef __glibcpp_wchar_t_is_modulo
1239#undef __glibcpp_wchar_t_traps
1240
1241  template<>
1242    struct numeric_limits<short>
1243    {
1244      static const bool is_specialized = true;
1245
1246      static short min() throw()
1247      { return __glibcpp_signed_short_min; }
1248      static short max() throw()
1249      { return __glibcpp_signed_short_max; }
1250
1251      static const int digits = __glibcpp_signed_short_digits;
1252      static const int digits10 = __glibcpp_signed_short_digits10;
1253      static const bool is_signed = true;
1254      static const bool is_integer = true;
1255      static const bool is_exact = true;
1256      static const int radix = 2;
1257      static short epsilon() throw()
1258      { return 0; }
1259      static short round_error() throw()
1260      { return 0; }
1261
1262      static const int min_exponent = 0;
1263      static const int min_exponent10 = 0;
1264      static const int max_exponent = 0;
1265      static const int max_exponent10 = 0;
1266
1267      static const bool has_infinity = false;
1268      static const bool has_quiet_NaN = false;
1269      static const bool has_signaling_NaN = false;
1270      static const float_denorm_style has_denorm = denorm_absent;
1271      static const bool has_denorm_loss = false;
1272
1273      static short infinity() throw()
1274      { return short(); }
1275      static short quiet_NaN() throw()
1276      { return short(); }
1277      static short signaling_NaN() throw()
1278      { return short(); }
1279      static short denorm_min() throw()
1280      { return short(); }
1281
1282      static const bool is_iec559 = true;
1283      static const bool is_bounded = true;
1284      static const bool is_modulo = __glibcpp_signed_short_is_modulo;
1285
1286      static const bool traps = __glibcpp_signed_short_traps;
1287      static const bool tinyness_before = false;
1288      static const float_round_style round_style = round_toward_zero;
1289    };
1290
1291#undef __glibcpp_signed_short_min
1292#undef __glibcpp_signed_short_max
1293#undef __glibcpp_signed_short_digits
1294#undef __glibcpp_signed_short_digits10
1295#undef __glibcpp_signed_short_is_modulo
1296#undef __glibcpp_signed_short_traps
1297
1298  template<>
1299    struct numeric_limits<unsigned short>
1300    {
1301      static const bool is_specialized = true;
1302
1303      static unsigned short min() throw()
1304      { return 0; }
1305      static unsigned short max() throw()
1306      { return __glibcpp_unsigned_short_max; }
1307
1308      static const int digits = __glibcpp_unsigned_short_digits;
1309      static const int digits10 = __glibcpp_unsigned_short_digits10;
1310      static const bool is_signed = false;
1311      static const bool is_integer = true;
1312      static const bool is_exact = true;
1313      static const int radix = 2;
1314      static unsigned short epsilon() throw()
1315      { return 0; }
1316      static unsigned short round_error() throw()
1317      { return 0; }
1318
1319      static const int min_exponent = 0;
1320      static const int min_exponent10 = 0;
1321      static const int max_exponent = 0;
1322      static const int max_exponent10 = 0;
1323
1324      static const bool has_infinity = false;
1325      static const bool has_quiet_NaN = false;
1326      static const bool has_signaling_NaN = false;
1327      static const float_denorm_style has_denorm = denorm_absent;
1328      static const bool has_denorm_loss = false;
1329
1330      static unsigned short infinity() throw()
1331      { return static_cast<unsigned short>(0); }
1332      static unsigned short quiet_NaN() throw()
1333      { return static_cast<unsigned short>(0); }
1334      static unsigned short signaling_NaN() throw()
1335      { return static_cast<unsigned short>(0); }
1336      static unsigned short denorm_min() throw()
1337      { return static_cast<unsigned short>(0); }
1338
1339      static const bool is_iec559 = true;
1340      static const bool is_bounded = true;
1341      static const bool is_modulo = true;
1342
1343      static const bool traps = __glibcpp_unsigned_short_traps;
1344      static const bool tinyness_before = false;
1345      static const float_round_style round_style = round_toward_zero;
1346    };
1347
1348#undef __glibcpp_unsigned_short_max
1349#undef __glibcpp_unsigned_short_digits
1350#undef __glibcpp_unsigned_short_digits10
1351#undef __glibcpp_unsigned_short_traps
1352
1353  template<>
1354    struct numeric_limits<int>
1355    {
1356      static const bool is_specialized = true;
1357
1358      static int min() throw()
1359      { return __glibcpp_signed_int_min; }
1360      static int max() throw()
1361      { return __glibcpp_signed_int_max; }
1362
1363      static const int digits = __glibcpp_signed_int_digits;
1364      static const int digits10 = __glibcpp_signed_int_digits10;
1365      static const bool is_signed = true;
1366      static const bool is_integer = true;
1367      static const bool is_exact = true;
1368      static const int radix = 2;
1369      static int epsilon() throw()
1370      { return 0; }
1371      static int round_error() throw()
1372      { return 0; }
1373
1374      static const int min_exponent = 0;
1375      static const int min_exponent10 = 0;
1376      static const int max_exponent = 0;
1377      static const int max_exponent10 = 0;
1378
1379      static const bool has_infinity = false;
1380      static const bool has_quiet_NaN = false;
1381      static const bool has_signaling_NaN = false;
1382      static const float_denorm_style has_denorm = denorm_absent;
1383      static const bool has_denorm_loss = false;
1384
1385      static int infinity() throw()
1386      { return static_cast<int>(0); }
1387      static int quiet_NaN() throw()
1388      { return static_cast<int>(0); }
1389      static int signaling_NaN() throw()
1390      { return static_cast<int>(0); }
1391      static int denorm_min() throw()
1392      { return static_cast<int>(0); }
1393
1394      static const bool is_iec559 = true;
1395      static const bool is_bounded = true;
1396      static const bool is_modulo = __glibcpp_signed_int_is_modulo;
1397
1398      static const bool traps = __glibcpp_signed_int_traps;
1399      static const bool tinyness_before = false;
1400      static const float_round_style round_style = round_toward_zero;
1401    };
1402
1403#undef __glibcpp_signed_int_min
1404#undef __glibcpp_signed_int_max
1405#undef __glibcpp_signed_int_digits
1406#undef __glibcpp_signed_int_digits10
1407#undef __glibcpp_signed_int_is_modulo
1408#undef __glibcpp_signed_int_traps
1409
1410  template<>
1411    struct numeric_limits<unsigned int>
1412    {
1413      static const bool is_specialized = true;
1414
1415      static unsigned int min() throw()
1416      { return 0; }
1417          static unsigned int max() throw()
1418      { return __glibcpp_unsigned_int_max; }
1419
1420      static const int digits = __glibcpp_unsigned_int_digits;
1421      static const int digits10 = __glibcpp_unsigned_int_digits10;
1422      static const bool is_signed = false;
1423      static const bool is_integer = true;
1424      static const bool is_exact = true;
1425      static const int radix = 2;
1426      static unsigned int epsilon() throw()
1427      { return 0; }
1428      static unsigned int round_error() throw()
1429      { return 0; }
1430
1431      static const int min_exponent = 0;
1432      static const int min_exponent10 = 0;
1433      static const int max_exponent = 0;
1434      static const int max_exponent10 = 0;
1435
1436      static const bool has_infinity = false;
1437      static const bool has_quiet_NaN = false;
1438      static const bool has_signaling_NaN = false;
1439      static const float_denorm_style has_denorm = denorm_absent;
1440      static const bool has_denorm_loss = false;
1441
1442      static unsigned int infinity() throw()
1443      { return static_cast<unsigned int>(0); }
1444      static unsigned int quiet_NaN() throw()
1445      { return static_cast<unsigned int>(0); }
1446      static unsigned int signaling_NaN() throw()
1447      { return static_cast<unsigned int>(0); }
1448      static unsigned int denorm_min() throw()
1449      { return static_cast<unsigned int>(0); }
1450
1451      static const bool is_iec559 = true;
1452      static const bool is_bounded = true;
1453      static const bool is_modulo = true;
1454
1455      static const bool traps = __glibcpp_unsigned_int_traps;
1456      static const bool tinyness_before = false;
1457      static const float_round_style round_style = round_toward_zero;
1458    };
1459
1460#undef __glibcpp_unsigned_int_max
1461#undef __glibcpp_unsigned_int_digits
1462#undef __glibcpp_unsigned_int_digits10
1463#undef __glibcpp_unsigned_int_traps
1464
1465  template<>
1466    struct numeric_limits<long>
1467    {
1468      static const bool is_specialized = true;
1469
1470      static long min() throw()
1471      { return __glibcpp_signed_long_min; }
1472      static long max() throw()
1473      { return __glibcpp_signed_long_max; }
1474
1475      static const int digits = __glibcpp_signed_long_digits;
1476      static const int digits10 = __glibcpp_signed_long_digits10;
1477      static const bool is_signed = true;
1478      static const bool is_integer = true;
1479      static const bool is_exact = true;
1480      static const int radix = 2;
1481      static long epsilon() throw()
1482      { return 0; }
1483      static long round_error() throw()
1484      { return 0; }
1485
1486      static const int min_exponent = 0;
1487      static const int min_exponent10 = 0;
1488      static const int max_exponent = 0;
1489      static const int max_exponent10 = 0;
1490
1491      static const bool has_infinity = false;
1492      static const bool has_quiet_NaN = false;
1493      static const bool has_signaling_NaN = false;
1494      static const float_denorm_style has_denorm = denorm_absent;
1495      static const bool has_denorm_loss = false;
1496
1497      static long infinity() throw()
1498      { return static_cast<long>(0); }
1499      static long quiet_NaN() throw()
1500      { return static_cast<long>(0); }
1501      static long signaling_NaN() throw()
1502      { return static_cast<long>(0); }
1503      static long denorm_min() throw()
1504      { return static_cast<long>(0); }
1505
1506      static const bool is_iec559 = true;
1507      static const bool is_bounded = true;
1508      static const bool is_modulo = __glibcpp_signed_long_is_modulo;
1509
1510      static const bool traps = __glibcpp_signed_long_traps;
1511      static const bool tinyness_before = false;
1512      static const float_round_style round_style = round_toward_zero;
1513    };
1514
1515#undef __glibcpp_signed_long_min
1516#undef __glibcpp_signed_long_max
1517#undef __glibcpp_signed_long_digits
1518#undef __glibcpp_signed_long_digits10
1519#undef __glibcpp_signed_long_is_modulo
1520#undef __glibcpp_signed_long_traps
1521
1522  template<>
1523    struct numeric_limits<unsigned long>
1524    {
1525      static const bool is_specialized = true;
1526
1527      static unsigned long min() throw()
1528      { return 0; }
1529      static unsigned long max() throw()
1530      { return __glibcpp_unsigned_long_max; }
1531
1532      static const int digits = __glibcpp_unsigned_long_digits;
1533      static const int digits10 = __glibcpp_unsigned_long_digits10;
1534      static const bool is_signed = false;
1535      static const bool is_integer = true;
1536      static const bool is_exact = true;
1537      static const int radix = 2;
1538      static unsigned long epsilon() throw()
1539      { return 0; }
1540      static unsigned long round_error() throw()
1541      { return 0; }
1542
1543      static const int min_exponent = 0;
1544      static const int min_exponent10 = 0;
1545      static const int max_exponent = 0;
1546      static const int max_exponent10 = 0;
1547
1548      static const bool has_infinity = false;
1549      static const bool has_quiet_NaN = false;
1550      static const bool has_signaling_NaN = false;
1551      static const float_denorm_style has_denorm = denorm_absent;
1552      static const bool has_denorm_loss = false;
1553
1554      static unsigned long infinity() throw()
1555      { return static_cast<unsigned long>(0); }
1556      static unsigned long quiet_NaN() throw()
1557      { return static_cast<unsigned long>(0); }
1558      static unsigned long signaling_NaN() throw()
1559      { return static_cast<unsigned long>(0); }
1560      static unsigned long denorm_min() throw()
1561      { return static_cast<unsigned long>(0); }
1562
1563      static const bool is_iec559 = true;
1564      static const bool is_bounded = true;
1565      static const bool is_modulo = true;
1566
1567      static const bool traps = __glibcpp_unsigned_long_traps;
1568      static const bool tinyness_before = false;
1569      static const float_round_style round_style = round_toward_zero;
1570    };
1571
1572#undef __glibcpp_unsigned_long_max
1573#undef __glibcpp_unsigned_long_digits
1574#undef __glibcpp_unsigned_long_digits10
1575#undef __glibcpp_unsigned_long_traps
1576
1577  template<>
1578    struct numeric_limits<long long>
1579    {
1580      static const bool is_specialized = true;
1581
1582      static long long min() throw()
1583      { return __glibcpp_signed_long_long_min; }
1584      static long long max() throw()
1585      { return __glibcpp_signed_long_long_max; }
1586
1587      static const int digits = __glibcpp_signed_long_long_digits;
1588      static const int digits10 = __glibcpp_signed_long_long_digits10;
1589      static const bool is_signed = true;
1590      static const bool is_integer = true;
1591      static const bool is_exact = true;
1592      static const int radix = 2;
1593      static long long epsilon() throw()
1594      { return 0; }
1595      static long long round_error() throw()
1596      { return 0; }
1597
1598      static const int min_exponent = 0;
1599      static const int min_exponent10 = 0;
1600      static const int max_exponent = 0;
1601      static const int max_exponent10 = 0;
1602
1603      static const bool has_infinity = false;
1604      static const bool has_quiet_NaN = false;
1605      static const bool has_signaling_NaN = false;
1606      static const float_denorm_style has_denorm = denorm_absent;
1607      static const bool has_denorm_loss = false;
1608
1609      static long long infinity() throw()
1610      { return static_cast<long long>(0); }
1611      static long long quiet_NaN() throw()
1612      { return static_cast<long long>(0); }
1613      static long long signaling_NaN() throw()
1614      { return static_cast<long long>(0); }
1615      static long long denorm_min() throw()
1616      { return static_cast<long long>(0); }
1617
1618      static const bool is_iec559 = true;
1619      static const bool is_bounded = true;
1620      static const bool is_modulo = __glibcpp_signed_long_long_is_modulo;
1621
1622      static const bool traps = __glibcpp_signed_long_long_traps;
1623      static const bool tinyness_before = false;
1624      static const float_round_style round_style = round_toward_zero;
1625    };
1626
1627#undef __glibcpp_signed_long_long_min
1628#undef __glibcpp_signed_long_long_max
1629#undef __glibcpp_signed_long_long_digits
1630#undef __glibcpp_signed_long_long_digits10
1631#undef __glibcpp_signed_long_long_is_modulo
1632#undef __glibcpp_signed_long_long_traps
1633
1634  template<>
1635    struct numeric_limits<unsigned long long>
1636    {
1637      static const bool is_specialized = true;
1638
1639      static unsigned long long min() throw()
1640      { return 0; }
1641      static unsigned long long max() throw()
1642      { return __glibcpp_unsigned_long_long_max; }
1643
1644      static const int digits = __glibcpp_unsigned_long_long_digits;
1645      static const int digits10 = __glibcpp_unsigned_long_long_digits10;
1646      static const bool is_signed = false;
1647      static const bool is_integer = true;
1648      static const bool is_exact = true;
1649      static const int radix = 2;
1650      static unsigned long long epsilon() throw()
1651      { return 0; }
1652      static unsigned long long round_error() throw()
1653      { return 0; }
1654
1655      static const int min_exponent = 0;
1656      static const int min_exponent10 = 0;
1657      static const int max_exponent = 0;
1658      static const int max_exponent10 = 0;
1659
1660      static const bool has_infinity = false;
1661      static const bool has_quiet_NaN = false;
1662      static const bool has_signaling_NaN = false;
1663      static const float_denorm_style has_denorm = denorm_absent;
1664      static const bool has_denorm_loss = false;
1665
1666      static unsigned long long infinity() throw()
1667      { return static_cast<unsigned long long>(0); }
1668      static unsigned long long quiet_NaN() throw()
1669      { return static_cast<unsigned long long>(0); }
1670      static unsigned long long signaling_NaN() throw()
1671      { return static_cast<unsigned long long>(0); }
1672      static unsigned long long denorm_min() throw()
1673      { return static_cast<unsigned long long>(0); }
1674
1675      static const bool is_iec559 = true;
1676      static const bool is_bounded = true;
1677      static const bool is_modulo = true;
1678
1679      static const bool traps = true;
1680      static const bool tinyness_before = false;
1681      static const float_round_style round_style = round_toward_zero;
1682    };
1683
1684#undef __glibcpp_unsigned_long_long_max
1685#undef __glibcpp_unsigned_long_long_digits
1686#undef __glibcpp_unsigned_long_long_digits10
1687#undef __glibcpp_unsigned_long_long_traps
1688
1689  template<>
1690    struct numeric_limits<float>
1691    {
1692      static const bool is_specialized = true;
1693
1694      static float min() throw()
1695      { return __glibcpp_float_min; }
1696      static float max() throw()
1697      { return __glibcpp_float_max; }
1698
1699      static const int digits = __glibcpp_float_digits;
1700      static const int digits10 = __glibcpp_float_digits10;
1701      static const bool is_signed = true;
1702      static const bool is_integer = false;
1703      static const bool is_exact = false;
1704      static const int radix = __glibcpp_float_radix;
1705      static float epsilon() throw()
1706      { return __glibcpp_float_epsilon; }
1707      static float round_error() throw()
1708      { return __glibcpp_float_round_error; }
1709
1710      static const int min_exponent = __glibcpp_float_min_exponent;
1711      static const int min_exponent10 = __glibcpp_float_min_exponent10;
1712      static const int max_exponent = __glibcpp_float_max_exponent;
1713      static const int max_exponent10 = __glibcpp_float_max_exponent10;
1714
1715      static const bool has_infinity = __glibcpp_float_has_infinity;
1716      static const bool has_quiet_NaN = __glibcpp_float_has_quiet_NaN;
1717      static const bool has_signaling_NaN = __glibcpp_float_has_signaling_NaN;
1718      static const float_denorm_style has_denorm = __glibcpp_float_has_denorm;
1719      static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss;
1720
1721      static float infinity() throw()
1722      { return __glibcpp_float_infinity; }
1723      static float quiet_NaN() throw()
1724      { return __glibcpp_float_quiet_NaN; }
1725      static float signaling_NaN() throw()
1726      { return __glibcpp_float_signaling_NaN; }
1727      static float denorm_min() throw()
1728      { return __glibcpp_float_denorm_min; }
1729
1730      static const bool is_iec559 = __glibcpp_float_is_iec559;
1731      static const bool is_bounded = __glibcpp_float_is_bounded;
1732      static const bool is_modulo = __glibcpp_float_is_modulo;
1733
1734      static const bool traps = __glibcpp_float_traps;
1735      static const bool tinyness_before = __glibcpp_float_tinyness_before;
1736      static const float_round_style round_style = __glibcpp_float_round_style;
1737    };
1738
1739#undef __glibcpp_float_min
1740#undef __glibcpp_float_max
1741#undef __glibcpp_float_digits
1742#undef __glibcpp_float_digits10
1743#undef __glibcpp_float_radix
1744#undef __glibcpp_float_round_error
1745#undef __glibcpp_float_min_exponent
1746#undef __glibcpp_float_min_exponent10
1747#undef __glibcpp_float_max_exponent
1748#undef __glibcpp_float_max_exponent10
1749#undef __glibcpp_float_has_infinity
1750#undef __glibcpp_float_has_quiet_NaN
1751#undef __glibcpp_float_has_signaling_NaN
1752#undef __glibcpp_float_has_denorm
1753#undef __glibcpp_float_has_denorm_loss
1754#undef __glibcpp_float_infinity
1755#undef __glibcpp_float_quiet_NaN
1756#undef __glibcpp_float_signaling_NaN
1757#undef __glibcpp_float_denorm_min
1758#undef __glibcpp_float_is_iec559
1759#undef __glibcpp_float_is_bounded
1760#undef __glibcpp_float_is_modulo
1761#undef __glibcpp_float_traps
1762#undef __glibcpp_float_tinyness_before
1763#undef __glibcpp_float_round_style
1764
1765  template<>
1766    struct numeric_limits<double>
1767    {
1768      static const bool is_specialized = true;
1769
1770      static double min() throw()
1771      { return __glibcpp_double_min; }
1772      static double max() throw()
1773      { return __glibcpp_double_max; }
1774
1775      static const int digits = __glibcpp_double_digits;
1776      static const int digits10 = __glibcpp_double_digits10;
1777      static const bool is_signed = true;
1778      static const bool is_integer = false;
1779      static const bool is_exact = false;
1780      static const int radix = __glibcpp_double_radix;
1781      static double epsilon() throw()
1782      { return __glibcpp_double_epsilon; }
1783      static double round_error() throw()
1784      { return __glibcpp_double_round_error; }
1785
1786      static const int min_exponent = __glibcpp_double_min_exponent;
1787      static const int min_exponent10 = __glibcpp_double_min_exponent10;
1788      static const int max_exponent = __glibcpp_double_max_exponent;
1789      static const int max_exponent10 = __glibcpp_double_max_exponent10;
1790
1791      static const bool has_infinity = __glibcpp_double_has_infinity;
1792      static const bool has_quiet_NaN = __glibcpp_double_has_quiet_NaN;
1793      static const bool has_signaling_NaN = __glibcpp_double_has_signaling_NaN;
1794      static const float_denorm_style has_denorm =
1795              __glibcpp_double_has_denorm;
1796      static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss;
1797
1798      static double infinity() throw()
1799      { return __glibcpp_double_infinity; }
1800      static double quiet_NaN() throw()
1801      { return __glibcpp_double_quiet_NaN; }
1802      static double signaling_NaN() throw()
1803      { return __glibcpp_double_signaling_NaN; }
1804      static double denorm_min() throw()
1805      { return __glibcpp_double_denorm_min; }
1806
1807      static const bool is_iec559 = __glibcpp_double_is_iec559;
1808      static const bool is_bounded = __glibcpp_double_is_bounded;
1809      static const bool is_modulo = __glibcpp_double_is_modulo;
1810
1811      static const bool traps = __glibcpp_double_traps;
1812      static const bool tinyness_before = __glibcpp_double_tinyness_before;
1813      static const float_round_style round_style =
1814              __glibcpp_double_round_style;
1815    };
1816
1817#undef __glibcpp_double_min
1818#undef __glibcpp_double_max
1819#undef __glibcpp_double_digits
1820#undef __glibcpp_double_digits10
1821#undef __glibcpp_double_radix
1822#undef __glibcpp_double_round_error
1823#undef __glibcpp_double_min_exponent
1824#undef __glibcpp_double_min_exponent10
1825#undef __glibcpp_double_max_exponent
1826#undef __glibcpp_double_max_exponent10
1827#undef __glibcpp_double_has_infinity
1828#undef __glibcpp_double_has_quiet_NaN
1829#undef __glibcpp_double_has_signaling_NaN
1830#undef __glibcpp_double_has_denorm
1831#undef __glibcpp_double_has_denorm_loss
1832#undef __glibcpp_double_infinity
1833#undef __glibcpp_double_quiet_NaN
1834#undef __glibcpp_double_signaling_NaN
1835#undef __glibcpp_double_denorm_min
1836#undef __glibcpp_double_is_iec559
1837#undef __glibcpp_double_is_bounded
1838#undef __glibcpp_double_is_modulo
1839#undef __glibcpp_double_traps
1840#undef __glibcpp_double_tinyness_before
1841#undef __glibcpp_double_round_style
1842
1843
1844  template<>
1845    struct numeric_limits<long double>
1846    {
1847      static const bool is_specialized = true;
1848
1849      static long double min() throw()
1850      { return __glibcpp_long_double_min; }
1851      static long double max() throw()
1852      { return __glibcpp_long_double_max; }
1853
1854      static const int digits = __glibcpp_long_double_digits;
1855      static const int digits10 = __glibcpp_long_double_digits10;
1856      static const bool is_signed = true;
1857      static const bool is_integer = false;
1858      static const bool is_exact = false;
1859      static const int radix = __glibcpp_long_double_radix;
1860      static long double epsilon() throw()
1861      { return __glibcpp_long_double_epsilon; }
1862      static long double round_error() throw()
1863      { return __glibcpp_long_double_round_error; }
1864
1865      static const int min_exponent = __glibcpp_long_double_min_exponent;
1866      static const int min_exponent10 = __glibcpp_long_double_min_exponent10;
1867      static const int max_exponent = __glibcpp_long_double_max_exponent;
1868      static const int max_exponent10 = __glibcpp_long_double_max_exponent10;
1869
1870      static const bool has_infinity = __glibcpp_long_double_has_infinity;
1871      static const bool has_quiet_NaN = __glibcpp_long_double_has_quiet_NaN;
1872      static const bool has_signaling_NaN =
1873                __glibcpp_long_double_has_signaling_NaN;
1874      static const float_denorm_style has_denorm =
1875                __glibcpp_long_double_has_denorm;
1876      static const bool has_denorm_loss =
1877                __glibcpp_long_double_has_denorm_loss;
1878
1879      static long double infinity() throw()
1880      { return __glibcpp_long_double_infinity; }
1881      static long double quiet_NaN() throw()
1882      { return __glibcpp_long_double_quiet_NaN; }
1883      static long double signaling_NaN() throw()
1884      { return __glibcpp_long_double_signaling_NaN; }
1885      static long double denorm_min() throw()
1886      { return __glibcpp_long_double_denorm_min; }
1887
1888      static const bool is_iec559 = __glibcpp_long_double_is_iec559;
1889      static const bool is_bounded = __glibcpp_long_double_is_bounded;
1890      static const bool is_modulo = __glibcpp_long_double_is_modulo;
1891
1892      static const bool traps = __glibcpp_long_double_traps;
1893      static const bool tinyness_before = __glibcpp_long_double_tinyness_before;
1894      static const float_round_style round_style =
1895        __glibcpp_long_double_round_style;
1896    };
1897
1898#undef __glibcpp_long_double_min
1899#undef __glibcpp_long_double_max
1900#undef __glibcpp_long_double_digits
1901#undef __glibcpp_long_double_digits10
1902#undef __glibcpp_long_double_radix
1903#undef __glibcpp_long_double_round_error
1904#undef __glibcpp_long_double_min_exponent
1905#undef __glibcpp_long_double_min_exponent10
1906#undef __glibcpp_long_double_max_exponent
1907#undef __glibcpp_long_double_max_exponent10
1908#undef __glibcpp_long_double_has_infinity
1909#undef __glibcpp_long_double_has_quiet_NaN
1910#undef __glibcpp_long_double_has_signaling_NaN
1911#undef __glibcpp_long_double_has_denorm
1912#undef __glibcpp_long_double_has_denorm_loss
1913#undef __glibcpp_long_double_infinity
1914#undef __glibcpp_long_double_quiet_NaN
1915#undef __glibcpp_long_double_signaling_NaN
1916#undef __glibcpp_long_double_denorm_min
1917#undef __glibcpp_long_double_is_iec559
1918#undef __glibcpp_long_double_is_bounded
1919#undef __glibcpp_long_double_is_modulo
1920#undef __glibcpp_long_double_traps
1921#undef __glibcpp_long_double_tinyness_before
1922#undef __glibcpp_long_double_round_style
1923
1924} // namespace std
1925
1926#endif // _CPP_NUMERIC_LIMITS
1927