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