2002-01-28 Phil Edwards <pme@gcc.gnu.org>
[official-gcc.git] / libstdc++-v3 / include / std / std_limits.h
blob91125ef949547e85a4014eab1938eb032bc7809b
1 // The template and inlines for the -*- C++ -*- numeric_limits classes.
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.
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.
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.
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.
30 // Note: this is not a conforming implementation.
31 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
34 // ISO 14882:1998
35 // 18.2.1
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.
43 #ifndef _CPP_NUMERIC_LIMITS
44 #define _CPP_NUMERIC_LIMITS 1
46 #pragma GCC system_header
48 #include <bits/cpu_limits.h>
49 #include <bits/c++config.h>
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)
62 // * floating points
63 // float (1)
64 // double (1)
65 // long double (1)
67 // GNU C++ undertstands (where supported by the host C-library)
68 // * integer
69 // long long, unsigned long long (2)
71 // which brings us to 15 fundamental arithmetic data types in GNU C++.
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.
80 // These values can be overridden in the target configuration file.
81 // The default values are appropriate for many 32-bit targets.
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
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
138 // You should not need to define any macros below this point, unless
139 // you have a machine with non-standard bit-widths.
141 // These values are the minimums and maximums for standard data types
142 // of common widths.
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
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
233 // bool-specific hooks:
234 // __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps
236 // This is actually CHAR_BITS because the new ABI says a bool
237 // is one (1) byte wide.
239 #ifndef __glibcpp_bool_digits
240 #define __glibcpp_bool_digits __glibcpp_char_bits
241 #endif
243 // char.
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
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
306 // short
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
353 // int
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
400 // long
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
447 // long long
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
496 // wchar_t
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
552 // float
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
595 // FIXME: These are just stubs and inkorrect
597 #ifndef __glibcpp_float_has_infinity
598 #define __glibcpp_float_has_infinity false
599 #endif
601 #ifndef __glibcpp_float_has_quiet_NaN
602 #define __glibcpp_float_has_quiet_NaN false
603 #endif
605 #ifndef __glibcpp_float_has_signaling_NaN
606 #define __glibcpp_float_has_signaling_NaN false
607 #endif
609 #ifndef __glibcpp_float_has_denorm
610 #define __glibcpp_float_has_denorm denorm_absent
611 #endif
613 #ifndef __glibcpp_float_has_denorm_loss
614 #define __glibcpp_float_has_denorm_loss false
615 #endif
617 #ifndef __glibcpp_float_infinity
618 #define __glibcpp_float_infinity 0.0F
619 #endif
621 #ifndef __glibcpp_float_quiet_NaN
622 #define __glibcpp_float_quiet_NaN 0.0F
623 #endif
625 #ifndef __glibcpp_float_signaling_NaN
626 #define __glibcpp_float_signaling_NaN 0.0F
627 #endif
629 #ifndef __glibcpp_float_denorm_min
630 #define __glibcpp_float_denorm_min 0.0F
631 #endif
633 #ifndef __glibcpp_float_is_iec559
634 #define __glibcpp_float_is_iec559 false
635 #endif
637 #ifndef __glibcpp_float_is_bounded
638 #define __glibcpp_float_is_bounded true
639 #endif
641 #ifndef __glibcpp_float_is_modulo
642 #define __glibcpp_float_is_modulo false
643 #endif
645 #ifndef __glibcpp_float_traps
646 #define __glibcpp_float_traps false
647 #endif
649 #ifndef __glibcpp_float_tinyness_before
650 #define __glibcpp_float_tinyness_before false
651 #endif
653 #ifndef __glibcpp_float_round_style
654 #define __glibcpp_float_round_style round_toward_zero
655 #endif
657 // double
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
699 // FIXME: These are just stubs and inkorrect
701 #ifndef __glibcpp_double_has_infinity
702 #define __glibcpp_double_has_infinity false
703 #endif
705 #ifndef __glibcpp_double_has_quiet_NaN
706 #define __glibcpp_double_has_quiet_NaN false
707 #endif
709 #ifndef __glibcpp_double_has_signaling_NaN
710 #define __glibcpp_double_has_signaling_NaN false
711 #endif
713 #ifndef __glibcpp_double_has_denorm
714 #define __glibcpp_double_has_denorm denorm_absent
715 #endif
717 #ifndef __glibcpp_double_has_denorm_loss
718 #define __glibcpp_double_has_denorm_loss false
719 #endif
721 #ifndef __glibcpp_double_infinity
722 #define __glibcpp_double_infinity 0.0
723 #endif
725 #ifndef __glibcpp_double_quiet_NaN
726 #define __glibcpp_double_quiet_NaN 0.0
727 #endif
729 #ifndef __glibcpp_double_signaling_NaN
730 #define __glibcpp_double_signaling_NaN 0.0
731 #endif
733 #ifndef __glibcpp_double_denorm_min
734 #define __glibcpp_double_denorm_min 0.0
735 #endif
737 #ifndef __glibcpp_double_is_iec559
738 #define __glibcpp_double_is_iec559 false
739 #endif
741 #ifndef __glibcpp_double_is_bounded
742 #define __glibcpp_double_is_bounded true
743 #endif
745 #ifndef __glibcpp_double_is_modulo
746 #define __glibcpp_double_is_modulo false
747 #endif
749 #ifndef __glibcpp_double_traps
750 #define __glibcpp_double_traps false
751 #endif
753 #ifndef __glibcpp_double_tinyness_before
754 #define __glibcpp_double_tinyness_before false
755 #endif
757 #ifndef __glibcpp_double_round_style
758 #define __glibcpp_double_round_style round_toward_zero
759 #endif
761 // long double
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
827 // FIXME: These are just stubs and inkorrect
829 #ifndef __glibcpp_long_double_has_infinity
830 #define __glibcpp_long_double_has_infinity false
831 #endif
833 #ifndef __glibcpp_long_double_has_quiet_NaN
834 #define __glibcpp_long_double_has_quiet_NaN false
835 #endif
837 #ifndef __glibcpp_long_double_has_signaling_NaN
838 #define __glibcpp_long_double_has_signaling_NaN false
839 #endif
841 #ifndef __glibcpp_long_double_has_denorm
842 #define __glibcpp_long_double_has_denorm denorm_absent
843 #endif
845 #ifndef __glibcpp_long_double_has_denorm_loss
846 #define __glibcpp_long_double_has_denorm_loss false
847 #endif
849 #ifndef __glibcpp_long_double_infinity
850 #define __glibcpp_long_double_infinity 0.0L
851 #endif
853 #ifndef __glibcpp_long_double_quiet_NaN
854 #define __glibcpp_long_double_quiet_NaN 0.0L
855 #endif
857 #ifndef __glibcpp_long_double_signaling_NaN
858 #define __glibcpp_long_double_signaling_NaN 0.0L
859 #endif
861 #ifndef __glibcpp_long_double_denorm_min
862 #define __glibcpp_long_double_denorm_min 0.0L
863 #endif
865 #ifndef __glibcpp_long_double_is_iec559
866 #define __glibcpp_long_double_is_iec559 false
867 #endif
869 #ifndef __glibcpp_long_double_is_bounded
870 #define __glibcpp_long_double_is_bounded true
871 #endif
873 #ifndef __glibcpp_long_double_is_modulo
874 #define __glibcpp_long_double_is_modulo false
875 #endif
877 #ifndef __glibcpp_long_double_traps
878 #define __glibcpp_long_double_traps false
879 #endif
881 #ifndef __glibcpp_long_double_tinyness_before
882 #define __glibcpp_long_double_tinyness_before false
883 #endif
885 #ifndef __glibcpp_long_double_round_style
886 #define __glibcpp_long_double_round_style round_toward_zero
887 #endif
890 namespace std
892 enum float_round_style
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
901 enum float_denorm_style
903 denorm_indeterminate = -1,
904 denorm_absent = 0,
905 denorm_present = 1
909 // The primary class traits
911 template<typename _Tp>
912 struct numeric_limits
914 static const bool is_specialized = false;
916 static _Tp min() throw() { return static_cast<_Tp>(0); }
917 static _Tp max() throw() { return static_cast<_Tp>(0); }
919 static const int digits = 0;
920 static const int digits10 = 0;
921 static const bool is_signed = false;
922 static const bool is_integer = false;
923 static const bool is_exact = false;
924 static const int radix = 0;
926 static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
927 static _Tp round_error() throw() { return static_cast<_Tp>(0); }
929 static const int min_exponent = 0;
930 static const int min_exponent10 = 0;
931 static const int max_exponent = 0;
932 static const int max_exponent10 = 0;
934 static const bool has_infinity = false;
935 static const bool has_quiet_NaN = false;
936 static const bool has_signaling_NaN = false;
937 static const float_denorm_style has_denorm = denorm_absent;
938 static const bool has_denorm_loss = false;
940 static _Tp infinity() throw() { return static_cast<_Tp>(0); }
941 static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
942 static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
943 static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
945 static const bool is_iec559 = false;
946 static const bool is_bounded = false;
947 static const bool is_modulo = false;
949 static const bool traps = false;
950 static const bool tinyness_before = false;
951 static const float_round_style round_style = round_toward_zero;
954 template<typename _Tp>
955 const bool
956 numeric_limits<_Tp>::is_specialized;
958 template<typename _Tp>
959 const int
960 numeric_limits<_Tp>::digits;
962 template<typename _Tp>
963 const int
964 numeric_limits<_Tp>::digits10;
966 template<typename _Tp>
967 const bool
968 numeric_limits<_Tp>::is_signed;
970 template<typename _Tp>
971 const bool
972 numeric_limits<_Tp>::is_integer;
974 template<typename _Tp>
975 const bool
976 numeric_limits<_Tp>::is_exact;
978 template<typename _Tp>
979 const int
980 numeric_limits<_Tp>::radix;
982 template<typename _Tp>
983 const int
984 numeric_limits<_Tp>::min_exponent;
986 template<typename _Tp>
987 const int
988 numeric_limits<_Tp>::min_exponent10;
990 template<typename _Tp>
991 const int
992 numeric_limits<_Tp>::max_exponent;
994 template<typename _Tp>
995 const int
996 numeric_limits<_Tp>::max_exponent10;
998 template<typename _Tp>
999 const bool
1000 numeric_limits<_Tp>::has_infinity;
1002 template<typename _Tp>
1003 const bool
1004 numeric_limits<_Tp>::has_quiet_NaN;
1006 template<typename _Tp>
1007 const bool
1008 numeric_limits<_Tp>::has_signaling_NaN;
1010 template<typename _Tp>
1011 const float_denorm_style
1012 numeric_limits<_Tp>::has_denorm;
1014 template<typename _Tp>
1015 const bool
1016 numeric_limits<_Tp>::has_denorm_loss;
1018 template<typename _Tp>
1019 const bool
1020 numeric_limits<_Tp>::is_iec559;
1022 template<typename _Tp>
1023 const bool
1024 numeric_limits<_Tp>::is_bounded;
1026 template<typename _Tp>
1027 const bool
1028 numeric_limits<_Tp>::is_modulo;
1030 template<typename _Tp>
1031 const bool
1032 numeric_limits<_Tp>::traps;
1034 template<typename _Tp>
1035 const bool
1036 numeric_limits<_Tp>::tinyness_before;
1038 template<typename _Tp>
1039 const float_round_style
1040 numeric_limits<_Tp>::round_style;
1042 // Now there follow 15 explicit specializations. Yes, 15. Make sure
1043 // you get the count right.
1045 template<>
1046 struct numeric_limits<bool>
1048 static const bool is_specialized = true;
1050 static bool min() throw()
1051 { return false; }
1053 static bool max() throw()
1054 { return true; }
1056 static const int digits = __glibcpp_bool_digits;
1057 static const int digits10 = 0;
1058 static const bool is_signed = false;
1059 static const bool is_integer = true;
1060 static const bool is_exact = true;
1061 static const int radix = 2;
1062 static bool epsilon() throw()
1063 { return false; }
1064 static bool round_error() throw()
1065 { return false; }
1067 static const int min_exponent = 0;
1068 static const int min_exponent10 = 0;
1069 static const int max_exponent = 0;
1070 static const int max_exponent10 = 0;
1072 static const bool has_infinity = false;
1073 static const bool has_quiet_NaN = false;
1074 static const bool has_signaling_NaN = false;
1075 static const float_denorm_style has_denorm = denorm_absent;
1076 static const bool has_denorm_loss = false;
1078 static bool infinity() throw()
1079 { return false; }
1080 static bool quiet_NaN() throw()
1081 { return false; }
1082 static bool signaling_NaN() throw()
1083 { return false; }
1084 static bool denorm_min() throw()
1085 { return false; }
1087 static const bool is_iec559 = true;
1088 static const bool is_bounded = true;
1089 static const bool is_modulo = true;
1091 // It is not clear what it means for a boolean type to trap.
1092 // This is a DR on the LWG issue list. Here, I use integer
1093 // promotion semantics.
1094 static const bool traps = __glibcpp_signed_int_traps
1095 || __glibcpp_signed_long_traps;
1096 static const bool tinyness_before = false;
1097 static const float_round_style round_style = round_toward_zero;
1100 #undef __glibcpp_bool_digits
1102 template<>
1103 struct numeric_limits<char>
1105 static const bool is_specialized = true;
1107 static char min() throw()
1108 { return __glibcpp_char_min; }
1109 static char max() throw()
1110 { return __glibcpp_char_max; }
1112 static const int digits = __glibcpp_char_digits;
1113 static const int digits10 = __glibcpp_char_digits10;
1114 static const bool is_signed = __glibcpp_plain_char_is_signed;
1115 static const bool is_integer = true;
1116 static const bool is_exact = true;
1117 static const int radix = 2;
1118 static char epsilon() throw()
1119 { return char(); }
1120 static char round_error() throw()
1121 { return char(); }
1123 static const int min_exponent = 0;
1124 static const int min_exponent10 = 0;
1125 static const int max_exponent = 0;
1126 static const int max_exponent10 = 0;
1128 static const bool has_infinity = false;
1129 static const bool has_quiet_NaN = false;
1130 static const bool has_signaling_NaN = false;
1131 static const float_denorm_style has_denorm = denorm_absent;
1132 static const bool has_denorm_loss = false;
1134 static char infinity() throw()
1135 { return char(); }
1136 static char quiet_NaN() throw()
1137 { return char(); }
1138 static char signaling_NaN() throw()
1139 { return char(); }
1140 static char denorm_min() throw()
1141 { return static_cast<char>(0); }
1143 static const bool is_iec559 = false;
1144 static const bool is_bounded = true;
1145 static const bool is_modulo = __glibcpp_char_is_modulo;
1147 static const bool traps = __glibcpp_char_traps;
1148 static const bool tinyness_before = false;
1149 static const float_round_style round_style = round_toward_zero;
1152 #undef __glibcpp_char_min
1153 #undef __glibcpp_char_max
1154 #undef __glibcpp_char_digits
1155 #undef __glibcpp_char_digits10
1156 #undef __glibcpp_char_is_signed
1157 #undef __glibcpp_char_is_modulo
1158 #undef __glibcpp_char_traps
1162 template<>
1163 struct numeric_limits<signed char>
1165 static const bool is_specialized = true;
1167 static signed char min() throw()
1168 { return __glibcpp_signed_char_min; }
1169 static signed char max() throw()
1170 { return __glibcpp_signed_char_max; }
1172 static const int digits = __glibcpp_signed_char_digits;
1173 static const int digits10 = __glibcpp_signed_char_digits10;
1174 static const bool is_signed = true;
1175 static const bool is_integer = true;
1176 static const bool is_exact = true;
1177 static const int radix = 2;
1178 static signed char epsilon() throw()
1179 { return 0; }
1180 static signed char round_error() throw()
1181 { return 0; }
1183 static const int min_exponent = 0;
1184 static const int min_exponent10 = 0;
1185 static const int max_exponent = 0;
1186 static const int max_exponent10 = 0;
1188 static const bool has_infinity = false;
1189 static const bool has_quiet_NaN = false;
1190 static const bool has_signaling_NaN = false;
1191 static const float_denorm_style has_denorm = denorm_absent;
1192 static const bool has_denorm_loss = false;
1194 static signed char infinity() throw()
1195 { return static_cast<signed char>(0); }
1196 static signed char quiet_NaN() throw()
1197 { return static_cast<signed char>(0); }
1198 static signed char signaling_NaN() throw()
1199 { return static_cast<signed char>(0); }
1200 static signed char denorm_min() throw()
1201 { return static_cast<signed char>(0); }
1203 static const bool is_iec559 = false;
1204 static const bool is_bounded = true;
1205 static const bool is_modulo = __glibcpp_signed_char_is_modulo;
1207 static const bool traps = __glibcpp_signed_char_traps;
1208 static const bool tinyness_before = false;
1209 static const float_round_style round_style = round_toward_zero;
1212 #undef __glibcpp_signed_char_min
1213 #undef __glibcpp_signed_char_max
1214 #undef __glibcpp_signed_char_digits
1215 #undef __glibcpp_signed_char_digits10
1216 #undef __glibcpp_signed_char_is_modulo
1217 #undef __glibcpp_signed_char_traps
1219 template<>
1220 struct numeric_limits<unsigned char>
1222 static const bool is_specialized = true;
1224 static unsigned char min() throw()
1225 { return 0; }
1226 static unsigned char max() throw()
1227 { return __glibcpp_unsigned_char_max; }
1229 static const int digits = __glibcpp_unsigned_char_digits;
1230 static const int digits10 = __glibcpp_unsigned_char_digits10;
1231 static const bool is_signed = false;
1232 static const bool is_integer = true;
1233 static const bool is_exact = true;
1234 static const int radix = 2;
1235 static unsigned char epsilon() throw()
1236 { return 0; }
1237 static unsigned char round_error() throw()
1238 { return 0; }
1240 static const int min_exponent = 0;
1241 static const int min_exponent10 = 0;
1242 static const int max_exponent = 0;
1243 static const int max_exponent10 = 0;
1245 static const bool has_infinity = false;
1246 static const bool has_quiet_NaN = false;
1247 static const bool has_signaling_NaN = false;
1248 static const float_denorm_style has_denorm = denorm_absent;
1249 static const bool has_denorm_loss = false;
1251 static unsigned char infinity() throw()
1252 { return static_cast<unsigned char>(0); }
1253 static unsigned char quiet_NaN() throw()
1254 { return static_cast<unsigned char>(0); }
1255 static unsigned char signaling_NaN() throw()
1256 { return static_cast<unsigned char>(0); }
1257 static unsigned char denorm_min() throw()
1258 { return static_cast<unsigned char>(0); }
1260 static const bool is_iec559 = false;
1261 static const bool is_bounded = true;
1262 static const bool is_modulo = true;
1264 static const bool traps = __glibcpp_unsigned_char_traps;
1265 static const bool tinyness_before = false;
1266 static const float_round_style round_style = round_toward_zero;
1269 #undef __glibcpp_unsigned_char_max
1270 #undef __glibcpp_unsigned_char_digits
1271 #undef __glibcpp_unsigned_char_digits10
1272 #undef __glibcpp_unsigned_char_traps
1274 template<>
1275 struct numeric_limits<wchar_t>
1277 static const bool is_specialized = true;
1279 static wchar_t min() throw()
1280 { return __glibcpp_wchar_t_min; }
1281 static wchar_t max() throw()
1282 { return __glibcpp_wchar_t_max; }
1284 static const int digits = __glibcpp_wchar_t_digits;
1285 static const int digits10 = __glibcpp_wchar_t_digits10;
1286 static const bool is_signed = __glibcpp_wchar_t_is_signed;
1287 static const bool is_integer = true;
1288 static const bool is_exact = true;
1289 static const int radix = 2;
1290 static wchar_t epsilon() throw()
1291 { return 0; }
1292 static wchar_t round_error() throw()
1293 { return 0; }
1295 static const int min_exponent = 0;
1296 static const int min_exponent10 = 0;
1297 static const int max_exponent = 0;
1298 static const int max_exponent10 = 0;
1300 static const bool has_infinity = false;
1301 static const bool has_quiet_NaN = false;
1302 static const bool has_signaling_NaN = false;
1303 static const float_denorm_style has_denorm = denorm_absent;
1304 static const bool has_denorm_loss = false;
1306 static wchar_t infinity() throw()
1307 { return wchar_t(); }
1308 static wchar_t quiet_NaN() throw()
1309 { return wchar_t(); }
1310 static wchar_t signaling_NaN() throw()
1311 { return wchar_t(); }
1312 static wchar_t denorm_min() throw()
1313 { return wchar_t(); }
1315 static const bool is_iec559 = false;
1316 static const bool is_bounded = true;
1317 static const bool is_modulo = __glibcpp_wchar_t_is_modulo;
1319 static const bool traps = __glibcpp_wchar_t_traps;
1320 static const bool tinyness_before = false;
1321 static const float_round_style round_style = round_toward_zero;
1324 #undef __glibcpp_wchar_t_min
1325 #undef __glibcpp_wchar_t_max
1326 #undef __glibcpp_wchar_t_digits
1327 #undef __glibcpp_wchar_t_digits10
1328 #undef __glibcpp_wchar_t_is_signed
1329 #undef __glibcpp_wchar_t_is_modulo
1330 #undef __glibcpp_wchar_t_traps
1332 template<>
1333 struct numeric_limits<short>
1335 static const bool is_specialized = true;
1337 static short min() throw()
1338 { return __glibcpp_signed_short_min; }
1339 static short max() throw()
1340 { return __glibcpp_signed_short_max; }
1342 static const int digits = __glibcpp_signed_short_digits;
1343 static const int digits10 = __glibcpp_signed_short_digits10;
1344 static const bool is_signed = true;
1345 static const bool is_integer = true;
1346 static const bool is_exact = true;
1347 static const int radix = 2;
1348 static short epsilon() throw()
1349 { return 0; }
1350 static short round_error() throw()
1351 { return 0; }
1353 static const int min_exponent = 0;
1354 static const int min_exponent10 = 0;
1355 static const int max_exponent = 0;
1356 static const int max_exponent10 = 0;
1358 static const bool has_infinity = false;
1359 static const bool has_quiet_NaN = false;
1360 static const bool has_signaling_NaN = false;
1361 static const float_denorm_style has_denorm = denorm_absent;
1362 static const bool has_denorm_loss = false;
1364 static short infinity() throw()
1365 { return short(); }
1366 static short quiet_NaN() throw()
1367 { return short(); }
1368 static short signaling_NaN() throw()
1369 { return short(); }
1370 static short denorm_min() throw()
1371 { return short(); }
1373 static const bool is_iec559 = true;
1374 static const bool is_bounded = true;
1375 static const bool is_modulo = __glibcpp_signed_short_is_modulo;
1377 static const bool traps = __glibcpp_signed_short_traps;
1378 static const bool tinyness_before = false;
1379 static const float_round_style round_style = round_toward_zero;
1382 #undef __glibcpp_signed_short_min
1383 #undef __glibcpp_signed_short_max
1384 #undef __glibcpp_signed_short_digits
1385 #undef __glibcpp_signed_short_digits10
1386 #undef __glibcpp_signed_short_is_modulo
1387 #undef __glibcpp_signed_short_traps
1389 template<>
1390 struct numeric_limits<unsigned short>
1392 static const bool is_specialized = true;
1394 static unsigned short min() throw()
1395 { return 0; }
1396 static unsigned short max() throw()
1397 { return __glibcpp_unsigned_short_max; }
1399 static const int digits = __glibcpp_unsigned_short_digits;
1400 static const int digits10 = __glibcpp_unsigned_short_digits10;
1401 static const bool is_signed = false;
1402 static const bool is_integer = true;
1403 static const bool is_exact = true;
1404 static const int radix = 2;
1405 static unsigned short epsilon() throw()
1406 { return 0; }
1407 static unsigned short round_error() throw()
1408 { return 0; }
1410 static const int min_exponent = 0;
1411 static const int min_exponent10 = 0;
1412 static const int max_exponent = 0;
1413 static const int max_exponent10 = 0;
1415 static const bool has_infinity = false;
1416 static const bool has_quiet_NaN = false;
1417 static const bool has_signaling_NaN = false;
1418 static const float_denorm_style has_denorm = denorm_absent;
1419 static const bool has_denorm_loss = false;
1421 static unsigned short infinity() throw()
1422 { return static_cast<unsigned short>(0); }
1423 static unsigned short quiet_NaN() throw()
1424 { return static_cast<unsigned short>(0); }
1425 static unsigned short signaling_NaN() throw()
1426 { return static_cast<unsigned short>(0); }
1427 static unsigned short denorm_min() throw()
1428 { return static_cast<unsigned short>(0); }
1430 static const bool is_iec559 = true;
1431 static const bool is_bounded = true;
1432 static const bool is_modulo = true;
1434 static const bool traps = __glibcpp_unsigned_short_traps;
1435 static const bool tinyness_before = false;
1436 static const float_round_style round_style = round_toward_zero;
1439 #undef __glibcpp_unsigned_short_max
1440 #undef __glibcpp_unsigned_short_digits
1441 #undef __glibcpp_unsigned_short_digits10
1442 #undef __glibcpp_unsigned_short_traps
1444 template<>
1445 struct numeric_limits<int>
1447 static const bool is_specialized = true;
1449 static int min() throw()
1450 { return __glibcpp_signed_int_min; }
1451 static int max() throw()
1452 { return __glibcpp_signed_int_max; }
1454 static const int digits = __glibcpp_signed_int_digits;
1455 static const int digits10 = __glibcpp_signed_int_digits10;
1456 static const bool is_signed = true;
1457 static const bool is_integer = true;
1458 static const bool is_exact = true;
1459 static const int radix = 2;
1460 static int epsilon() throw()
1461 { return 0; }
1462 static int round_error() throw()
1463 { return 0; }
1465 static const int min_exponent = 0;
1466 static const int min_exponent10 = 0;
1467 static const int max_exponent = 0;
1468 static const int max_exponent10 = 0;
1470 static const bool has_infinity = false;
1471 static const bool has_quiet_NaN = false;
1472 static const bool has_signaling_NaN = false;
1473 static const float_denorm_style has_denorm = denorm_absent;
1474 static const bool has_denorm_loss = false;
1476 static int infinity() throw()
1477 { return static_cast<int>(0); }
1478 static int quiet_NaN() throw()
1479 { return static_cast<int>(0); }
1480 static int signaling_NaN() throw()
1481 { return static_cast<int>(0); }
1482 static int denorm_min() throw()
1483 { return static_cast<int>(0); }
1485 static const bool is_iec559 = true;
1486 static const bool is_bounded = true;
1487 static const bool is_modulo = __glibcpp_signed_int_is_modulo;
1489 static const bool traps = __glibcpp_signed_int_traps;
1490 static const bool tinyness_before = false;
1491 static const float_round_style round_style = round_toward_zero;
1494 #undef __glibcpp_signed_int_min
1495 #undef __glibcpp_signed_int_max
1496 #undef __glibcpp_signed_int_digits
1497 #undef __glibcpp_signed_int_digits10
1498 #undef __glibcpp_signed_int_is_modulo
1499 #undef __glibcpp_signed_int_traps
1501 template<>
1502 struct numeric_limits<unsigned int>
1504 static const bool is_specialized = true;
1506 static unsigned int min() throw()
1507 { return 0; }
1508 static unsigned int max() throw()
1509 { return __glibcpp_unsigned_int_max; }
1511 static const int digits = __glibcpp_unsigned_int_digits;
1512 static const int digits10 = __glibcpp_unsigned_int_digits10;
1513 static const bool is_signed = false;
1514 static const bool is_integer = true;
1515 static const bool is_exact = true;
1516 static const int radix = 2;
1517 static unsigned int epsilon() throw()
1518 { return 0; }
1519 static unsigned int round_error() throw()
1520 { return 0; }
1522 static const int min_exponent = 0;
1523 static const int min_exponent10 = 0;
1524 static const int max_exponent = 0;
1525 static const int max_exponent10 = 0;
1527 static const bool has_infinity = false;
1528 static const bool has_quiet_NaN = false;
1529 static const bool has_signaling_NaN = false;
1530 static const float_denorm_style has_denorm = denorm_absent;
1531 static const bool has_denorm_loss = false;
1533 static unsigned int infinity() throw()
1534 { return static_cast<unsigned int>(0); }
1535 static unsigned int quiet_NaN() throw()
1536 { return static_cast<unsigned int>(0); }
1537 static unsigned int signaling_NaN() throw()
1538 { return static_cast<unsigned int>(0); }
1539 static unsigned int denorm_min() throw()
1540 { return static_cast<unsigned int>(0); }
1542 static const bool is_iec559 = true;
1543 static const bool is_bounded = true;
1544 static const bool is_modulo = true;
1546 static const bool traps = __glibcpp_unsigned_int_traps;
1547 static const bool tinyness_before = false;
1548 static const float_round_style round_style = round_toward_zero;
1551 #undef __glibcpp_unsigned_int_max
1552 #undef __glibcpp_unsigned_int_digits
1553 #undef __glibcpp_unsigned_int_digits10
1554 #undef __glibcpp_unsigned_int_traps
1556 template<>
1557 struct numeric_limits<long>
1559 static const bool is_specialized = true;
1561 static long min() throw()
1562 { return __glibcpp_signed_long_min; }
1563 static long max() throw()
1564 { return __glibcpp_signed_long_max; }
1566 static const int digits = __glibcpp_signed_long_digits;
1567 static const int digits10 = __glibcpp_signed_long_digits10;
1568 static const bool is_signed = true;
1569 static const bool is_integer = true;
1570 static const bool is_exact = true;
1571 static const int radix = 2;
1572 static long epsilon() throw()
1573 { return 0; }
1574 static long round_error() throw()
1575 { return 0; }
1577 static const int min_exponent = 0;
1578 static const int min_exponent10 = 0;
1579 static const int max_exponent = 0;
1580 static const int max_exponent10 = 0;
1582 static const bool has_infinity = false;
1583 static const bool has_quiet_NaN = false;
1584 static const bool has_signaling_NaN = false;
1585 static const float_denorm_style has_denorm = denorm_absent;
1586 static const bool has_denorm_loss = false;
1588 static long infinity() throw()
1589 { return static_cast<long>(0); }
1590 static long quiet_NaN() throw()
1591 { return static_cast<long>(0); }
1592 static long signaling_NaN() throw()
1593 { return static_cast<long>(0); }
1594 static long denorm_min() throw()
1595 { return static_cast<long>(0); }
1597 static const bool is_iec559 = true;
1598 static const bool is_bounded = true;
1599 static const bool is_modulo = __glibcpp_signed_long_is_modulo;
1601 static const bool traps = __glibcpp_signed_long_traps;
1602 static const bool tinyness_before = false;
1603 static const float_round_style round_style = round_toward_zero;
1606 #undef __glibcpp_signed_long_min
1607 #undef __glibcpp_signed_long_max
1608 #undef __glibcpp_signed_long_digits
1609 #undef __glibcpp_signed_long_digits10
1610 #undef __glibcpp_signed_long_is_modulo
1611 #undef __glibcpp_signed_long_traps
1613 template<>
1614 struct numeric_limits<unsigned long>
1616 static const bool is_specialized = true;
1618 static unsigned long min() throw()
1619 { return 0; }
1620 static unsigned long max() throw()
1621 { return __glibcpp_unsigned_long_max; }
1623 static const int digits = __glibcpp_unsigned_long_digits;
1624 static const int digits10 = __glibcpp_unsigned_long_digits10;
1625 static const bool is_signed = false;
1626 static const bool is_integer = true;
1627 static const bool is_exact = true;
1628 static const int radix = 2;
1629 static unsigned long epsilon() throw()
1630 { return 0; }
1631 static unsigned long round_error() throw()
1632 { return 0; }
1634 static const int min_exponent = 0;
1635 static const int min_exponent10 = 0;
1636 static const int max_exponent = 0;
1637 static const int max_exponent10 = 0;
1639 static const bool has_infinity = false;
1640 static const bool has_quiet_NaN = false;
1641 static const bool has_signaling_NaN = false;
1642 static const float_denorm_style has_denorm = denorm_absent;
1643 static const bool has_denorm_loss = false;
1645 static unsigned long infinity() throw()
1646 { return static_cast<unsigned long>(0); }
1647 static unsigned long quiet_NaN() throw()
1648 { return static_cast<unsigned long>(0); }
1649 static unsigned long signaling_NaN() throw()
1650 { return static_cast<unsigned long>(0); }
1651 static unsigned long denorm_min() throw()
1652 { return static_cast<unsigned long>(0); }
1654 static const bool is_iec559 = true;
1655 static const bool is_bounded = true;
1656 static const bool is_modulo = true;
1658 static const bool traps = __glibcpp_unsigned_long_traps;
1659 static const bool tinyness_before = false;
1660 static const float_round_style round_style = round_toward_zero;
1663 #undef __glibcpp_unsigned_long_max
1664 #undef __glibcpp_unsigned_long_digits
1665 #undef __glibcpp_unsigned_long_digits10
1666 #undef __glibcpp_unsigned_long_traps
1668 template<>
1669 struct numeric_limits<long long>
1671 static const bool is_specialized = true;
1673 static long long min() throw()
1674 { return __glibcpp_signed_long_long_min; }
1675 static long long max() throw()
1676 { return __glibcpp_signed_long_long_max; }
1678 static const int digits = __glibcpp_signed_long_long_digits;
1679 static const int digits10 = __glibcpp_signed_long_long_digits10;
1680 static const bool is_signed = true;
1681 static const bool is_integer = true;
1682 static const bool is_exact = true;
1683 static const int radix = 2;
1684 static long long epsilon() throw()
1685 { return 0; }
1686 static long long round_error() throw()
1687 { return 0; }
1689 static const int min_exponent = 0;
1690 static const int min_exponent10 = 0;
1691 static const int max_exponent = 0;
1692 static const int max_exponent10 = 0;
1694 static const bool has_infinity = false;
1695 static const bool has_quiet_NaN = false;
1696 static const bool has_signaling_NaN = false;
1697 static const float_denorm_style has_denorm = denorm_absent;
1698 static const bool has_denorm_loss = false;
1700 static long long infinity() throw()
1701 { return static_cast<long long>(0); }
1702 static long long quiet_NaN() throw()
1703 { return static_cast<long long>(0); }
1704 static long long signaling_NaN() throw()
1705 { return static_cast<long long>(0); }
1706 static long long denorm_min() throw()
1707 { return static_cast<long long>(0); }
1709 static const bool is_iec559 = true;
1710 static const bool is_bounded = true;
1711 static const bool is_modulo = __glibcpp_signed_long_long_is_modulo;
1713 static const bool traps = __glibcpp_signed_long_long_traps;
1714 static const bool tinyness_before = false;
1715 static const float_round_style round_style = round_toward_zero;
1718 #undef __glibcpp_signed_long_long_min
1719 #undef __glibcpp_signed_long_long_max
1720 #undef __glibcpp_signed_long_long_digits
1721 #undef __glibcpp_signed_long_long_digits10
1722 #undef __glibcpp_signed_long_long_is_modulo
1723 #undef __glibcpp_signed_long_long_traps
1725 template<>
1726 struct numeric_limits<unsigned long long>
1728 static const bool is_specialized = true;
1730 static unsigned long long min() throw()
1731 { return 0; }
1732 static unsigned long long max() throw()
1733 { return __glibcpp_unsigned_long_long_max; }
1735 static const int digits = __glibcpp_unsigned_long_long_digits;
1736 static const int digits10 = __glibcpp_unsigned_long_long_digits10;
1737 static const bool is_signed = false;
1738 static const bool is_integer = true;
1739 static const bool is_exact = true;
1740 static const int radix = 2;
1741 static unsigned long long epsilon() throw()
1742 { return 0; }
1743 static unsigned long long round_error() throw()
1744 { return 0; }
1746 static const int min_exponent = 0;
1747 static const int min_exponent10 = 0;
1748 static const int max_exponent = 0;
1749 static const int max_exponent10 = 0;
1751 static const bool has_infinity = false;
1752 static const bool has_quiet_NaN = false;
1753 static const bool has_signaling_NaN = false;
1754 static const float_denorm_style has_denorm = denorm_absent;
1755 static const bool has_denorm_loss = false;
1757 static unsigned long long infinity() throw()
1758 { return static_cast<unsigned long long>(0); }
1759 static unsigned long long quiet_NaN() throw()
1760 { return static_cast<unsigned long long>(0); }
1761 static unsigned long long signaling_NaN() throw()
1762 { return static_cast<unsigned long long>(0); }
1763 static unsigned long long denorm_min() throw()
1764 { return static_cast<unsigned long long>(0); }
1766 static const bool is_iec559 = true;
1767 static const bool is_bounded = true;
1768 static const bool is_modulo = true;
1770 static const bool traps = true;
1771 static const bool tinyness_before = false;
1772 static const float_round_style round_style = round_toward_zero;
1775 #undef __glibcpp_unsigned_long_long_max
1776 #undef __glibcpp_unsigned_long_long_digits
1777 #undef __glibcpp_unsigned_long_long_digits10
1778 #undef __glibcpp_unsigned_long_long_traps
1780 template<>
1781 struct numeric_limits<float>
1783 static const bool is_specialized = true;
1785 static float min() throw()
1786 { return __glibcpp_float_min; }
1787 static float max() throw()
1788 { return __glibcpp_float_max; }
1790 static const int digits = __glibcpp_float_digits;
1791 static const int digits10 = __glibcpp_float_digits10;
1792 static const bool is_signed = true;
1793 static const bool is_integer = false;
1794 static const bool is_exact = false;
1795 static const int radix = __glibcpp_float_radix;
1796 static float epsilon() throw()
1797 { return __glibcpp_float_epsilon; }
1798 static float round_error() throw()
1799 { return __glibcpp_float_round_error; }
1801 static const int min_exponent = __glibcpp_float_min_exponent;
1802 static const int min_exponent10 = __glibcpp_float_min_exponent10;
1803 static const int max_exponent = __glibcpp_float_max_exponent;
1804 static const int max_exponent10 = __glibcpp_float_max_exponent10;
1806 static const bool has_infinity = __glibcpp_float_has_infinity;
1807 static const bool has_quiet_NaN = __glibcpp_float_has_quiet_NaN;
1808 static const bool has_signaling_NaN = __glibcpp_float_has_signaling_NaN;
1809 static const float_denorm_style has_denorm = __glibcpp_float_has_denorm;
1810 static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss;
1812 static float infinity() throw()
1813 { return __glibcpp_float_infinity; }
1814 static float quiet_NaN() throw()
1815 { return __glibcpp_float_quiet_NaN; }
1816 static float signaling_NaN() throw()
1817 { return __glibcpp_float_signaling_NaN; }
1818 static float denorm_min() throw()
1819 { return __glibcpp_float_denorm_min; }
1821 static const bool is_iec559 = __glibcpp_float_is_iec559;
1822 static const bool is_bounded = __glibcpp_float_is_bounded;
1823 static const bool is_modulo = __glibcpp_float_is_modulo;
1825 static const bool traps = __glibcpp_float_traps;
1826 static const bool tinyness_before = __glibcpp_float_tinyness_before;
1827 static const float_round_style round_style = __glibcpp_float_round_style;
1830 #undef __glibcpp_float_min
1831 #undef __glibcpp_float_max
1832 #undef __glibcpp_float_digits
1833 #undef __glibcpp_float_digits10
1834 #undef __glibcpp_float_radix
1835 #undef __glibcpp_float_round_error
1836 #undef __glibcpp_float_min_exponent
1837 #undef __glibcpp_float_min_exponent10
1838 #undef __glibcpp_float_max_exponent
1839 #undef __glibcpp_float_max_exponent10
1840 #undef __glibcpp_float_has_infinity
1841 #undef __glibcpp_float_has_quiet_NaN
1842 #undef __glibcpp_float_has_signaling_NaN
1843 #undef __glibcpp_float_has_denorm
1844 #undef __glibcpp_float_has_denorm_loss
1845 #undef __glibcpp_float_infinity
1846 #undef __glibcpp_float_quiet_NaN
1847 #undef __glibcpp_float_signaling_NaN
1848 #undef __glibcpp_float_denorm_min
1849 #undef __glibcpp_float_is_iec559
1850 #undef __glibcpp_float_is_bounded
1851 #undef __glibcpp_float_is_modulo
1852 #undef __glibcpp_float_traps
1853 #undef __glibcpp_float_tinyness_before
1854 #undef __glibcpp_float_round_style
1856 template<>
1857 struct numeric_limits<double>
1859 static const bool is_specialized = true;
1861 static double min() throw()
1862 { return __glibcpp_double_min; }
1863 static double max() throw()
1864 { return __glibcpp_double_max; }
1866 static const int digits = __glibcpp_double_digits;
1867 static const int digits10 = __glibcpp_double_digits10;
1868 static const bool is_signed = true;
1869 static const bool is_integer = false;
1870 static const bool is_exact = false;
1871 static const int radix = __glibcpp_double_radix;
1872 static double epsilon() throw()
1873 { return __glibcpp_double_epsilon; }
1874 static double round_error() throw()
1875 { return __glibcpp_double_round_error; }
1877 static const int min_exponent = __glibcpp_double_min_exponent;
1878 static const int min_exponent10 = __glibcpp_double_min_exponent10;
1879 static const int max_exponent = __glibcpp_double_max_exponent;
1880 static const int max_exponent10 = __glibcpp_double_max_exponent10;
1882 static const bool has_infinity = __glibcpp_double_has_infinity;
1883 static const bool has_quiet_NaN = __glibcpp_double_has_quiet_NaN;
1884 static const bool has_signaling_NaN = __glibcpp_double_has_signaling_NaN;
1885 static const float_denorm_style has_denorm =
1886 __glibcpp_double_has_denorm;
1887 static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss;
1889 static double infinity() throw()
1890 { return __glibcpp_double_infinity; }
1891 static double quiet_NaN() throw()
1892 { return __glibcpp_double_quiet_NaN; }
1893 static double signaling_NaN() throw()
1894 { return __glibcpp_double_signaling_NaN; }
1895 static double denorm_min() throw()
1896 { return __glibcpp_double_denorm_min; }
1898 static const bool is_iec559 = __glibcpp_double_is_iec559;
1899 static const bool is_bounded = __glibcpp_double_is_bounded;
1900 static const bool is_modulo = __glibcpp_double_is_modulo;
1902 static const bool traps = __glibcpp_double_traps;
1903 static const bool tinyness_before = __glibcpp_double_tinyness_before;
1904 static const float_round_style round_style =
1905 __glibcpp_double_round_style;
1908 #undef __glibcpp_double_min
1909 #undef __glibcpp_double_max
1910 #undef __glibcpp_double_digits
1911 #undef __glibcpp_double_digits10
1912 #undef __glibcpp_double_radix
1913 #undef __glibcpp_double_round_error
1914 #undef __glibcpp_double_min_exponent
1915 #undef __glibcpp_double_min_exponent10
1916 #undef __glibcpp_double_max_exponent
1917 #undef __glibcpp_double_max_exponent10
1918 #undef __glibcpp_double_has_infinity
1919 #undef __glibcpp_double_has_quiet_NaN
1920 #undef __glibcpp_double_has_signaling_NaN
1921 #undef __glibcpp_double_has_denorm
1922 #undef __glibcpp_double_has_denorm_loss
1923 #undef __glibcpp_double_infinity
1924 #undef __glibcpp_double_quiet_NaN
1925 #undef __glibcpp_double_signaling_NaN
1926 #undef __glibcpp_double_denorm_min
1927 #undef __glibcpp_double_is_iec559
1928 #undef __glibcpp_double_is_bounded
1929 #undef __glibcpp_double_is_modulo
1930 #undef __glibcpp_double_traps
1931 #undef __glibcpp_double_tinyness_before
1932 #undef __glibcpp_double_round_style
1935 template<>
1936 struct numeric_limits<long double>
1938 static const bool is_specialized = true;
1940 static long double min() throw()
1941 { return __glibcpp_long_double_min; }
1942 static long double max() throw()
1943 { return __glibcpp_long_double_max; }
1945 static const int digits = __glibcpp_long_double_digits;
1946 static const int digits10 = __glibcpp_long_double_digits10;
1947 static const bool is_signed = true;
1948 static const bool is_integer = false;
1949 static const bool is_exact = false;
1950 static const int radix = __glibcpp_long_double_radix;
1951 static long double epsilon() throw()
1952 { return __glibcpp_long_double_epsilon; }
1953 static long double round_error() throw()
1954 { return __glibcpp_long_double_round_error; }
1956 static const int min_exponent = __glibcpp_long_double_min_exponent;
1957 static const int min_exponent10 = __glibcpp_long_double_min_exponent10;
1958 static const int max_exponent = __glibcpp_long_double_max_exponent;
1959 static const int max_exponent10 = __glibcpp_long_double_max_exponent10;
1961 static const bool has_infinity = __glibcpp_long_double_has_infinity;
1962 static const bool has_quiet_NaN = __glibcpp_long_double_has_quiet_NaN;
1963 static const bool has_signaling_NaN =
1964 __glibcpp_long_double_has_signaling_NaN;
1965 static const float_denorm_style has_denorm =
1966 __glibcpp_long_double_has_denorm;
1967 static const bool has_denorm_loss =
1968 __glibcpp_long_double_has_denorm_loss;
1970 static long double infinity() throw()
1971 { return __glibcpp_long_double_infinity; }
1972 static long double quiet_NaN() throw()
1973 { return __glibcpp_long_double_quiet_NaN; }
1974 static long double signaling_NaN() throw()
1975 { return __glibcpp_long_double_signaling_NaN; }
1976 static long double denorm_min() throw()
1977 { return __glibcpp_long_double_denorm_min; }
1979 static const bool is_iec559 = __glibcpp_long_double_is_iec559;
1980 static const bool is_bounded = __glibcpp_long_double_is_bounded;
1981 static const bool is_modulo = __glibcpp_long_double_is_modulo;
1983 static const bool traps = __glibcpp_long_double_traps;
1984 static const bool tinyness_before = __glibcpp_long_double_tinyness_before;
1985 static const float_round_style round_style =
1986 __glibcpp_long_double_round_style;
1989 #undef __glibcpp_long_double_min
1990 #undef __glibcpp_long_double_max
1991 #undef __glibcpp_long_double_digits
1992 #undef __glibcpp_long_double_digits10
1993 #undef __glibcpp_long_double_radix
1994 #undef __glibcpp_long_double_round_error
1995 #undef __glibcpp_long_double_min_exponent
1996 #undef __glibcpp_long_double_min_exponent10
1997 #undef __glibcpp_long_double_max_exponent
1998 #undef __glibcpp_long_double_max_exponent10
1999 #undef __glibcpp_long_double_has_infinity
2000 #undef __glibcpp_long_double_has_quiet_NaN
2001 #undef __glibcpp_long_double_has_signaling_NaN
2002 #undef __glibcpp_long_double_has_denorm
2003 #undef __glibcpp_long_double_has_denorm_loss
2004 #undef __glibcpp_long_double_infinity
2005 #undef __glibcpp_long_double_quiet_NaN
2006 #undef __glibcpp_long_double_signaling_NaN
2007 #undef __glibcpp_long_double_denorm_min
2008 #undef __glibcpp_long_double_is_iec559
2009 #undef __glibcpp_long_double_is_bounded
2010 #undef __glibcpp_long_double_is_modulo
2011 #undef __glibcpp_long_double_traps
2012 #undef __glibcpp_long_double_tinyness_before
2013 #undef __glibcpp_long_double_round_style
2015 } // namespace std
2017 #endif // _CPP_NUMERIC_LIMITS