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 <[email protected]>
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 
887 namespace 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