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