limits

Go to the documentation of this file.
00001 // The template and inlines for the -*- C++ -*- numeric_limits classes.
00002 
00003 // Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
00004 //
00005 // This file is part of the GNU ISO C++ Library.  This library is free
00006 // software; you can redistribute it and/or modify it under the
00007 // terms of the GNU General Public License as published by the
00008 // Free Software Foundation; either version 2, or (at your option)
00009 // any later version.
00010 
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU General Public License for more details.
00015 
00016 // You should have received a copy of the GNU General Public License along
00017 // with this library; see the file COPYING.  If not, write to the Free
00018 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
00019 // USA.
00020 
00021 // As a special exception, you may use this file as part of a free software
00022 // library without restriction.  Specifically, if other files instantiate
00023 // templates or use macros or inline functions from this file, or you compile
00024 // this file and link it with other files to produce an executable, this
00025 // file does not by itself cause the resulting executable to be covered by
00026 // the GNU General Public License.  This exception does not however
00027 // invalidate any other reasons why the executable file might be covered by
00028 // the GNU General Public License.
00029 
00030 // Note: this is not a conforming implementation.
00031 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
00032 
00033 //
00034 // ISO 14882:1998
00035 // 18.2.1
00036 //
00037 
00043 #ifndef _CPP_NUMERIC_LIMITS
00044 #define _CPP_NUMERIC_LIMITS 1
00045 
00046 #pragma GCC system_header
00047 
00048 #include <bits/cpu_limits.h>
00049 #include <bits/c++config.h>
00050 
00051 //
00052 // The numeric_limits<> traits document implementation-defined aspects
00053 // of fundamental arithmetic data types (integers and floating points).
00054 // From Standard C++ point of view, there are 13 such types:
00055 //   * integers
00056 //         bool                             (1)
00057 //         char, signed char, unsigned char         (3)
00058 //         short, unsigned short                (2)
00059 //         int, unsigned                    (2)
00060 //         long, unsigned long                  (2)
00061 //
00062 //   * floating points
00063 //         float                        (1)
00064 //         double                       (1)
00065 //         long double                      (1)
00066 //
00067 // GNU C++ undertstands (where supported by the host C-library) 
00068 //   * integer
00069 //         long long, unsigned long long            (2)
00070 //
00071 // which brings us to 15 fundamental arithmetic data types in GNU C++.
00072 //
00073 // 
00074 // Since a numeric_limits<> is a bit tricky to get right, we rely on
00075 // an interface composed of macros which should be defined in config/os
00076 // or config/cpu when they differ from the generic (read arbitrary)
00077 // definitions given here.
00078 //
00079 
00080 // These values can be overridden in the target configuration file.
00081 // The default values are appropriate for many 32-bit targets.
00082 
00083 #ifndef __glibcpp_char_bits
00084 #define __glibcpp_char_bits 8
00085 #endif
00086 #ifdef __CHAR_UNSIGNED__
00087 #define __glibcpp_plain_char_is_signed false
00088 #else
00089 #define __glibcpp_plain_char_is_signed true
00090 #endif
00091 #ifndef __glibcpp_short_bits
00092 #define __glibcpp_short_bits 16
00093 #endif
00094 #ifndef __glibcpp_int_bits
00095 #define __glibcpp_int_bits 32
00096 #endif
00097 #ifndef __glibcpp_long_bits
00098 #define __glibcpp_long_bits 32
00099 #endif
00100 #ifndef __glibcpp_wchar_t_bits
00101 #define __glibcpp_wchar_t_bits 32
00102 #endif
00103 #ifndef __glibcpp_wchar_t_is_signed
00104 #define __glibcpp_wchar_t_is_signed true
00105 #endif
00106 #ifndef __glibcpp_long_long_bits
00107 #define __glibcpp_long_long_bits 64
00108 #endif
00109 #ifndef __glibcpp_float_bits
00110 #define __glibcpp_float_bits 32
00111 #endif
00112 #ifndef __glibcpp_double_bits
00113 #define __glibcpp_double_bits 64
00114 #endif
00115 #ifndef __glibcpp_long_double_bits
00116 #define __glibcpp_long_double_bits 128
00117 #endif
00118 
00119 #ifndef __glibcpp_char_traps
00120 #define __glibcpp_char_traps true
00121 #endif
00122 #ifndef __glibcpp_short_traps
00123 #define __glibcpp_short_traps true
00124 #endif
00125 #ifndef __glibcpp_int_traps
00126 #define __glibcpp_int_traps true
00127 #endif
00128 #ifndef __glibcpp_long_traps
00129 #define __glibcpp_long_traps true
00130 #endif
00131 #ifndef __glibcpp_wchar_t_traps
00132 #define __glibcpp_wchar_t_traps true
00133 #endif
00134 #ifndef __glibcpp_long_long_traps
00135 #define __glibcpp_long_long_traps true
00136 #endif
00137 
00138 // You should not need to define any macros below this point, unless
00139 // you have a machine with non-standard bit-widths.
00140 
00141 // These values are the minimums and maximums for standard data types
00142 // of common widths.
00143 
00144 #define __glibcpp_s8_max 127
00145 #define __glibcpp_s8_min (-__glibcpp_s8_max - 1)
00146 #define __glibcpp_s8_digits 7
00147 #define __glibcpp_s8_digits10 2
00148 #define __glibcpp_u8_min 0U
00149 #define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1)
00150 #define __glibcpp_u8_digits 8
00151 #define __glibcpp_u8_digits10 2
00152 #define __glibcpp_s16_max 32767
00153 #define __glibcpp_s16_min (-__glibcpp_s16_max - 1)
00154 #define __glibcpp_s16_digits 15
00155 #define __glibcpp_s16_digits10 4
00156 #define __glibcpp_u16_min 0U
00157 #define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1)
00158 #define __glibcpp_u16_digits 16
00159 #define __glibcpp_u16_digits10 4
00160 #define __glibcpp_s32_max 2147483647L
00161 #define __glibcpp_s32_min (-__glibcpp_s32_max - 1)
00162 #define __glibcpp_s32_digits 31
00163 #define __glibcpp_s32_digits10 9
00164 #define __glibcpp_u32_min 0UL
00165 #define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1)
00166 #define __glibcpp_u32_digits 32
00167 #define __glibcpp_u32_digits10 9
00168 #define __glibcpp_s64_max 9223372036854775807LL
00169 #define __glibcpp_s64_min (-__glibcpp_s64_max - 1)
00170 #define __glibcpp_s64_digits 63
00171 #define __glibcpp_s64_digits10 18
00172 #define __glibcpp_u64_min 0ULL
00173 #define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1)
00174 #define __glibcpp_u64_digits 64
00175 #define __glibcpp_u64_digits10 19
00176 
00177 #define __glibcpp_f32_min 1.17549435e-38F
00178 #define __glibcpp_f32_max 3.40282347e+38F
00179 #define __glibcpp_f32_digits 24
00180 #define __glibcpp_f32_digits10 6
00181 #define __glibcpp_f32_radix 2
00182 #define __glibcpp_f32_epsilon 1.19209290e-07F
00183 #define __glibcpp_f32_round_error 1.0F
00184 #define __glibcpp_f32_min_exponent -125
00185 #define __glibcpp_f32_min_exponent10 -37
00186 #define __glibcpp_f32_max_exponent 128
00187 #define __glibcpp_f32_max_exponent10 38
00188 #define __glibcpp_f64_min 2.2250738585072014e-308
00189 #define __glibcpp_f64_max 1.7976931348623157e+308
00190 #define __glibcpp_f64_digits 53
00191 #define __glibcpp_f64_digits10 15
00192 #define __glibcpp_f64_radix 2
00193 #define __glibcpp_f64_epsilon 2.2204460492503131e-16
00194 #define __glibcpp_f64_round_error 1.0
00195 #define __glibcpp_f64_min_exponent -1021
00196 #define __glibcpp_f64_min_exponent10 -307
00197 #define __glibcpp_f64_max_exponent 1024
00198 #define __glibcpp_f64_max_exponent10 308
00199 #define __glibcpp_f80_min 3.36210314311209350626e-4932L
00200 #define __glibcpp_f80_max 1.18973149535723176502e+4932L
00201 #define __glibcpp_f80_digits 64
00202 #define __glibcpp_f80_digits10 18
00203 #define __glibcpp_f80_radix 2
00204 #define __glibcpp_f80_epsilon 1.08420217248550443401e-19L
00205 #define __glibcpp_f80_round_error 1.0L
00206 #define __glibcpp_f80_min_exponent -16381
00207 #define __glibcpp_f80_min_exponent10 -4931
00208 #define __glibcpp_f80_max_exponent 16384
00209 #define __glibcpp_f80_max_exponent10 4932
00210 #define __glibcpp_f96_min 1.68105157155604675313e-4932L
00211 #define __glibcpp_f96_max 1.18973149535723176502e+4932L
00212 #define __glibcpp_f96_digits 64
00213 #define __glibcpp_f96_digits10 18
00214 #define __glibcpp_f96_radix 2
00215 #define __glibcpp_f96_epsilon 1.08420217248550443401e-19L
00216 #define __glibcpp_f96_round_error 1.0L
00217 #define __glibcpp_f96_min_exponent -16382
00218 #define __glibcpp_f96_min_exponent10 -4931
00219 #define __glibcpp_f96_max_exponent 16384
00220 #define __glibcpp_f96_max_exponent10 4932
00221 #define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L
00222 #define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L
00223 #define __glibcpp_f128_digits 113
00224 #define __glibcpp_f128_digits10 33
00225 #define __glibcpp_f128_radix 2
00226 #define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L
00227 #define __glibcpp_f128_round_error 1.0L
00228 #define __glibcpp_f128_min_exponent -16381
00229 #define __glibcpp_f128_min_exponent10 -4931
00230 #define __glibcpp_f128_max_exponent 16384
00231 #define __glibcpp_f128_max_exponent10 4932
00232 
00233 // bool-specific hooks:
00234 //     __glibcpp_bool_digits  __glibcpp_int_traps __glibcpp_long_traps
00235 
00236 #ifndef __glibcpp_bool_digits
00237 #define __glibcpp_bool_digits 1
00238 #endif
00239 
00240 // char.
00241 
00242 #define __glibcpp_plain_char_traps true
00243 #define __glibcpp_signed_char_traps true
00244 #define __glibcpp_unsigned_char_traps true
00245 #ifndef __glibcpp_char_is_modulo
00246 #define __glibcpp_char_is_modulo true
00247 #endif
00248 #ifndef __glibcpp_signed_char_is_modulo
00249 #define __glibcpp_signed_char_is_modulo true
00250 #endif
00251 #if __glibcpp_char_bits == 8
00252 #define __glibcpp_signed_char_min __glibcpp_s8_min
00253 #define __glibcpp_signed_char_max __glibcpp_s8_max
00254 #define __glibcpp_signed_char_digits __glibcpp_s8_digits
00255 #define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10
00256 #define __glibcpp_unsigned_char_min __glibcpp_u8_min
00257 #define __glibcpp_unsigned_char_max __glibcpp_u8_max
00258 #define __glibcpp_unsigned_char_digits __glibcpp_u8_digits
00259 #define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10
00260 #elif __glibcpp_char_bits == 16
00261 #define __glibcpp_signed_char_min __glibcpp_s16_min
00262 #define __glibcpp_signed_char_max __glibcpp_s16_max
00263 #define __glibcpp_signed_char_digits __glibcpp_s16_digits
00264 #define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10
00265 #define __glibcpp_unsigned_char_min __glibcpp_u16_min
00266 #define __glibcpp_unsigned_char_max __glibcpp_u16_max
00267 #define __glibcpp_unsigned_char_digits __glibcpp_u16_digits
00268 #define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10
00269 #elif __glibcpp_char_bits == 32
00270 #define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min
00271 #define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max
00272 #define __glibcpp_signed_char_digits __glibcpp_s32_digits
00273 #define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10
00274 #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min
00275 #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max
00276 #define __glibcpp_unsigned_char_digits __glibcpp_u32_digits
00277 #define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10
00278 #elif __glibcpp_char_bits == 64
00279 #define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min
00280 #define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max
00281 #define __glibcpp_signed_char_digits __glibcpp_s64_digits
00282 #define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10
00283 #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min
00284 #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max
00285 #define __glibcpp_unsigned_char_digits __glibcpp_u64_digits
00286 #define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10
00287 #else
00288 // You must define these macros in the configuration file.
00289 #endif
00290 
00291 #if __glibcpp_plain_char_is_signed
00292 #define __glibcpp_char_min (char)__glibcpp_signed_char_min
00293 #define __glibcpp_char_max (char)__glibcpp_signed_char_max
00294 #define __glibcpp_char_digits __glibcpp_signed_char_digits
00295 #define __glibcpp_char_digits10 __glibcpp_signed_char_digits
00296 #else
00297 #define __glibcpp_char_min (char)__glibcpp_unsigned_char_min
00298 #define __glibcpp_char_max (char)__glibcpp_unsigned_char_max
00299 #define __glibcpp_char_digits __glibcpp_unsigned_char_digits
00300 #define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits
00301 #endif
00302 
00303 // short
00304 
00305 #define __glibcpp_signed_short_traps true
00306 #define __glibcpp_unsigned_short_traps true
00307 #ifndef __glibcpp_signed_short_is_modulo
00308 #define __glibcpp_signed_short_is_modulo true
00309 #endif
00310 #if __glibcpp_short_bits == 8
00311 #define __glibcpp_signed_short_min __glibcpp_s8_min
00312 #define __glibcpp_signed_short_max __glibcpp_s8_max
00313 #define __glibcpp_signed_short_digits __glibcpp_s8_digits
00314 #define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10
00315 #define __glibcpp_unsigned_short_min __glibcpp_u8_min
00316 #define __glibcpp_unsigned_short_max __glibcpp_u8_max
00317 #define __glibcpp_unsigned_short_digits __glibcpp_u8_digits
00318 #define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10
00319 #elif __glibcpp_short_bits == 16
00320 #define __glibcpp_signed_short_min __glibcpp_s16_min
00321 #define __glibcpp_signed_short_max __glibcpp_s16_max
00322 #define __glibcpp_signed_short_digits __glibcpp_s16_digits
00323 #define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10
00324 #define __glibcpp_unsigned_short_min __glibcpp_u16_min
00325 #define __glibcpp_unsigned_short_max __glibcpp_u16_max
00326 #define __glibcpp_unsigned_short_digits __glibcpp_u16_digits
00327 #define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10
00328 #elif __glibcpp_short_bits == 32
00329 #define __glibcpp_signed_short_min (short)__glibcpp_s32_min
00330 #define __glibcpp_signed_short_max (short)__glibcpp_s32_max
00331 #define __glibcpp_signed_short_digits __glibcpp_s32_digits
00332 #define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10
00333 #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min
00334 #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max
00335 #define __glibcpp_unsigned_short_digits __glibcpp_u32_digits
00336 #define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10
00337 #elif __glibcpp_short_bits == 64
00338 #define __glibcpp_signed_short_min (short)__glibcpp_s64_min
00339 #define __glibcpp_signed_short_max (short)__glibcpp_s64_max
00340 #define __glibcpp_signed_short_digits __glibcpp_s64_digits
00341 #define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10
00342 #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min
00343 #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max
00344 #define __glibcpp_unsigned_short_digits __glibcpp_u64_digits
00345 #define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10
00346 #else
00347 // You must define these macros in the configuration file.
00348 #endif
00349 
00350 // int
00351 
00352 #define __glibcpp_signed_int_traps true
00353 #define __glibcpp_unsigned_int_traps true
00354 #ifndef __glibcpp_signed_int_is_modulo
00355 #define __glibcpp_signed_int_is_modulo true
00356 #endif
00357 #if __glibcpp_int_bits == 8
00358 #define __glibcpp_signed_int_min __glibcpp_s8_min
00359 #define __glibcpp_signed_int_max __glibcpp_s8_max
00360 #define __glibcpp_signed_int_digits __glibcpp_s8_digits
00361 #define __glibcpp_signed_int_digits10 __glibcpp_s8_digits10
00362 #define __glibcpp_unsigned_int_min __glibcpp_u8_min
00363 #define __glibcpp_unsigned_int_max __glibcpp_u8_max
00364 #define __glibcpp_unsigned_int_digits __glibcpp_u8_digits
00365 #define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10
00366 #elif __glibcpp_int_bits == 16
00367 #define __glibcpp_signed_int_min __glibcpp_s16_min
00368 #define __glibcpp_signed_int_max __glibcpp_s16_max
00369 #define __glibcpp_signed_int_digits __glibcpp_s16_digits
00370 #define __glibcpp_signed_int_digits10 __glibcpp_s16_digits10
00371 #define __glibcpp_unsigned_int_min __glibcpp_u16_min
00372 #define __glibcpp_unsigned_int_max __glibcpp_u16_max
00373 #define __glibcpp_unsigned_int_digits __glibcpp_u16_digits
00374 #define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10
00375 #elif __glibcpp_int_bits == 32
00376 #define __glibcpp_signed_int_min (int)__glibcpp_s32_min
00377 #define __glibcpp_signed_int_max (int)__glibcpp_s32_max
00378 #define __glibcpp_signed_int_digits __glibcpp_s32_digits
00379 #define __glibcpp_signed_int_digits10 __glibcpp_s32_digits10
00380 #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u32_min
00381 #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max
00382 #define __glibcpp_unsigned_int_digits __glibcpp_u32_digits
00383 #define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10
00384 #elif __glibcpp_int_bits == 64
00385 #define __glibcpp_signed_int_min (int)__glibcpp_s64_min
00386 #define __glibcpp_signed_int_max (int)__glibcpp_s64_max
00387 #define __glibcpp_signed_int_digits __glibcpp_s64_digits
00388 #define __glibcpp_signed_int_digits10 __glibcpp_s64_digits10
00389 #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u64_min
00390 #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u64_max
00391 #define __glibcpp_unsigned_int_digits __glibcpp_u64_digits
00392 #define __glibcpp_unsigned_int_digits10 __glibcpp_u64_digits10
00393 #else
00394 // You must define these macros in the configuration file.
00395 #endif
00396 
00397 // long
00398 
00399 #define __glibcpp_signed_long_traps true
00400 #define __glibcpp_unsigned_long_traps true
00401 #ifndef __glibcpp_signed_long_is_modulo
00402 #define __glibcpp_signed_long_is_modulo true
00403 #endif
00404 #if __glibcpp_long_bits == 8
00405 #define __glibcpp_signed_long_min __glibcpp_s8_min
00406 #define __glibcpp_signed_long_max __glibcpp_s8_max
00407 #define __glibcpp_signed_long_digits __glibcpp_s8_digits
00408 #define __glibcpp_signed_long_digits10 __glibcpp_s8_digits10
00409 #define __glibcpp_unsigned_long_min __glibcpp_u8_min
00410 #define __glibcpp_unsigned_long_max __glibcpp_u8_max
00411 #define __glibcpp_unsigned_long_digits __glibcpp_u8_digits
00412 #define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10
00413 #elif __glibcpp_long_bits == 16
00414 #define __glibcpp_signed_long_min __glibcpp_s16_min
00415 #define __glibcpp_signed_long_max __glibcpp_s16_max
00416 #define __glibcpp_signed_long_digits __glibcpp_s16_digits
00417 #define __glibcpp_signed_long_digits10 __glibcpp_s16_digits10
00418 #define __glibcpp_unsigned_long_min __glibcpp_u16_min
00419 #define __glibcpp_unsigned_long_max __glibcpp_u16_max
00420 #define __glibcpp_unsigned_long_digits __glibcpp_u16_digits
00421 #define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10
00422 #elif __glibcpp_long_bits == 32
00423 #define __glibcpp_signed_long_min __glibcpp_s32_min
00424 #define __glibcpp_signed_long_max __glibcpp_s32_max
00425 #define __glibcpp_signed_long_digits __glibcpp_s32_digits
00426 #define __glibcpp_signed_long_digits10 __glibcpp_s32_digits10
00427 #define __glibcpp_unsigned_long_min __glibcpp_u32_min
00428 #define __glibcpp_unsigned_long_max __glibcpp_u32_max
00429 #define __glibcpp_unsigned_long_digits __glibcpp_u32_digits
00430 #define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10
00431 #elif __glibcpp_long_bits == 64
00432 #define __glibcpp_signed_long_min (long)__glibcpp_s64_min
00433 #define __glibcpp_signed_long_max (long)__glibcpp_s64_max
00434 #define __glibcpp_signed_long_digits __glibcpp_s64_digits
00435 #define __glibcpp_signed_long_digits10 __glibcpp_s64_digits10
00436 #define __glibcpp_unsigned_long_min (unsigned long)__glibcpp_u64_min
00437 #define __glibcpp_unsigned_long_max (unsigned long)__glibcpp_u64_max
00438 #define __glibcpp_unsigned_long_digits __glibcpp_u64_digits
00439 #define __glibcpp_unsigned_long_digits10 __glibcpp_u64_digits10
00440 #else
00441 // You must define these macros in the configuration file.
00442 #endif
00443 
00444 // long long
00445 
00446 #define __glibcpp_signed_long_long_traps true
00447 #define __glibcpp_signed_long_long_traps true
00448 #ifndef __glibcpp_signed_long_long_is_modulo
00449 #define __glibcpp_signed_long_long_is_modulo true
00450 #endif
00451 #if __glibcpp_long_long_bits == 8
00452 #define __glibcpp_signed_long_long_min __glibcpp_s8_min
00453 #define __glibcpp_signed_long_long_max __glibcpp_s8_max
00454 #define __glibcpp_signed_long_long_digits __glibcpp_s8_digits
00455 #define __glibcpp_signed_long_long_digits10 __glibcpp_s8_digits10
00456 #define __glibcpp_unsigned_long_long_min __glibcpp_u8_min
00457 #define __glibcpp_unsigned_long_long_max __glibcpp_u8_max
00458 #define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits
00459 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10
00460 #elif __glibcpp_long_long_bits == 16
00461 #define __glibcpp_signed_long_long_min __glibcpp_s16_min
00462 #define __glibcpp_signed_long_long_max __glibcpp_s16_max
00463 #define __glibcpp_signed_long_long_digits __glibcpp_s16_digits
00464 #define __glibcpp_signed_long_long_digits10 __glibcpp_s16_digits10
00465 #define __glibcpp_unsigned_long_long_min __glibcpp_u16_min
00466 #define __glibcpp_unsigned_long_long_max __glibcpp_u16_max
00467 #define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits
00468 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10
00469 #elif __glibcpp_long_long_bits == 32
00470 #define __glibcpp_signed_long_long_min __glibcpp_s32_min
00471 #define __glibcpp_signed_long_long_max __glibcpp_s32_max
00472 #define __glibcpp_signed_long_long_digits __glibcpp_s32_digits
00473 #define __glibcpp_signed_long_long_digits10 __glibcpp_s32_digits10
00474 #define __glibcpp_unsigned_long_long_min __glibcpp_u32_min
00475 #define __glibcpp_unsigned_long_long_max __glibcpp_u32_max
00476 #define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits
00477 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10
00478 #elif __glibcpp_long_long_bits == 64
00479 #define __glibcpp_signed_long_long_min __glibcpp_s64_min
00480 #define __glibcpp_signed_long_long_max __glibcpp_s64_max
00481 #define __glibcpp_signed_long_long_digits __glibcpp_s64_digits
00482 #define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10
00483 #define __glibcpp_signed_long_long_traps true
00484 #define __glibcpp_unsigned_long_long_min __glibcpp_u64_min
00485 #define __glibcpp_unsigned_long_long_max __glibcpp_u64_max
00486 #define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits
00487 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10
00488 #define __glibcpp_unsigned_long_long_traps true
00489 #else
00490 // You must define these macros in the configuration file.
00491 #endif
00492 
00493 // wchar_t
00494 
00495 #define __glibcpp_wchar_t_traps true
00496 #ifndef __glibcpp_wchar_t_is_modulo
00497 #define __glibcpp_wchar_t_is_modulo true
00498 #endif
00499 #if __glibcpp_wchar_t_is_signed
00500 #if __glibcpp_wchar_t_bits == 8
00501 #define __glibcpp_wchar_t_min __glibcpp_s8_min
00502 #define __glibcpp_wchar_t_max __glibcpp_s8_max
00503 #define __glibcpp_wchar_t_digits __glibcpp_s8_digits
00504 #define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10
00505 #elif __glibcpp_wchar_t_bits == 16
00506 #define __glibcpp_wchar_t_min __glibcpp_s16_min
00507 #define __glibcpp_wchar_t_max __glibcpp_s16_max
00508 #define __glibcpp_wchar_t_digits __glibcpp_s16_digits
00509 #define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10
00510 #elif __glibcpp_wchar_t_bits == 32
00511 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min
00512 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max
00513 #define __glibcpp_wchar_t_digits __glibcpp_s32_digits
00514 #define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10
00515 #elif __glibcpp_wchar_t_bits == 64
00516 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min
00517 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max
00518 #define __glibcpp_wchar_t_digits __glibcpp_s64_digits
00519 #define __glibcpp_wchar_t_digits10 __glibcpp_s64_digits10
00520 #else
00521 // You must define these macros in the configuration file.
00522 #endif
00523 #else
00524 #if __glibcpp_wchar_t_bits == 8
00525 #define __glibcpp_wchar_t_min __glibcpp_u8_min
00526 #define __glibcpp_wchar_t_max __glibcpp_u8_max
00527 #define __glibcpp_wchar_t_digits __glibcpp_u8_digits
00528 #define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10
00529 #elif __glibcpp_wchar_t_bits == 16
00530 #define __glibcpp_wchar_t_min __glibcpp_u16_min
00531 #define __glibcpp_wchar_t_max __glibcpp_u16_max
00532 #define __glibcpp_wchar_t_digits __glibcpp_u16_digits
00533 #define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10
00534 #elif __glibcpp_wchar_t_bits == 32
00535 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min
00536 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max
00537 #define __glibcpp_wchar_t_digits __glibcpp_u32_digits
00538 #define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10
00539 #elif __glibcpp_wchar_t_bits == 64
00540 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min
00541 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max
00542 #define __glibcpp_wchar_t_digits __glibcpp_u64_digits
00543 #define __glibcpp_wchar_t_digits10 __glibcpp_u64_digits10
00544 #else
00545 // You must define these macros in the configuration file.
00546 #endif
00547 #endif
00548 
00549 // float
00550 //
00551 
00552 #if __glibcpp_float_bits == 32
00553 #define __glibcpp_float_min __glibcpp_f32_min
00554 #define __glibcpp_float_max __glibcpp_f32_max
00555 #define __glibcpp_float_digits __glibcpp_f32_digits
00556 #define __glibcpp_float_digits10 __glibcpp_f32_digits10
00557 #define __glibcpp_float_radix __glibcpp_f32_radix
00558 #define __glibcpp_float_epsilon __glibcpp_f32_epsilon
00559 #define __glibcpp_float_round_error __glibcpp_f32_round_error
00560 #define __glibcpp_float_min_exponent __glibcpp_f32_min_exponent
00561 #define __glibcpp_float_min_exponent10 __glibcpp_f32_min_exponent10
00562 #define __glibcpp_float_max_exponent __glibcpp_f32_max_exponent
00563 #define __glibcpp_float_max_exponent10 __glibcpp_f32_max_exponent10
00564 #elif __glibcpp_float_bits == 64
00565 #define __glibcpp_float_min __glibcpp_f64_min
00566 #define __glibcpp_float_max __glibcpp_f64_max
00567 #define __glibcpp_float_digits __glibcpp_f64_digits
00568 #define __glibcpp_float_digits10 __glibcpp_f64_digits10
00569 #define __glibcpp_float_radix __glibcpp_f64_radix
00570 #define __glibcpp_float_epsilon __glibcpp_f64_epsilon
00571 #define __glibcpp_float_round_error __glibcpp_f64_round_error
00572 #define __glibcpp_float_min_exponent __glibcpp_f64_min_exponent
00573 #define __glibcpp_float_min_exponent10 __glibcpp_f64_min_exponent10
00574 #define __glibcpp_float_max_exponent __glibcpp_f64_max_exponent
00575 #define __glibcpp_float_max_exponent10 __glibcpp_f64_max_exponent10
00576 #elif __glibcpp_float_bits == 80
00577 #define __glibcpp_float_min __glibcpp_f80_min
00578 #define __glibcpp_float_max __glibcpp_f80_max
00579 #define __glibcpp_float_digits __glibcpp_f80_digits
00580 #define __glibcpp_float_digits10 __glibcpp_f80_digits10
00581 #define __glibcpp_float_radix __glibcpp_f80_radix
00582 #define __glibcpp_float_epsilon __glibcpp_f80_epsilon
00583 #define __glibcpp_float_round_error __glibcpp_f80_round_error
00584 #define __glibcpp_float_min_exponent __glibcpp_f80_min_exponent
00585 #define __glibcpp_float_min_exponent10 __glibcpp_f80_min_exponent10
00586 #define __glibcpp_float_max_exponent __glibcpp_f80_max_exponent
00587 #define __glibcpp_float_max_exponent10 __glibcpp_f80_max_exponent10
00588 #else
00589 // You must define these macros in the configuration file.
00590 #endif
00591 
00592 // FIXME: These are just stubs and inkorrect
00593 
00594 #ifndef __glibcpp_float_has_infinity
00595 #define __glibcpp_float_has_infinity false
00596 #endif
00597 
00598 #ifndef __glibcpp_float_has_quiet_NaN
00599 #define __glibcpp_float_has_quiet_NaN false
00600 #endif
00601 
00602 #ifndef __glibcpp_float_has_signaling_NaN
00603 #define __glibcpp_float_has_signaling_NaN false
00604 #endif
00605 
00606 #ifndef __glibcpp_float_has_denorm
00607 #define __glibcpp_float_has_denorm denorm_absent
00608 #endif
00609 
00610 #ifndef __glibcpp_float_has_denorm_loss
00611 #define __glibcpp_float_has_denorm_loss false
00612 #endif
00613 
00614 #ifndef __glibcpp_float_infinity
00615 #define __glibcpp_float_infinity 0.0F
00616 #endif
00617 
00618 #ifndef __glibcpp_float_quiet_NaN
00619 #define __glibcpp_float_quiet_NaN 0.0F
00620 #endif
00621 
00622 #ifndef __glibcpp_float_signaling_NaN
00623 #define __glibcpp_float_signaling_NaN 0.0F
00624 #endif
00625 
00626 #ifndef __glibcpp_float_denorm_min
00627 #define __glibcpp_float_denorm_min 0.0F
00628 #endif
00629 
00630 #ifndef __glibcpp_float_is_iec559
00631 #define __glibcpp_float_is_iec559 false
00632 #endif
00633 
00634 #ifndef __glibcpp_float_is_bounded
00635 #define __glibcpp_float_is_bounded true
00636 #endif
00637 
00638 #ifndef __glibcpp_float_is_modulo
00639 #define __glibcpp_float_is_modulo false
00640 #endif
00641 
00642 #ifndef __glibcpp_float_traps
00643 #define __glibcpp_float_traps false
00644 #endif
00645 
00646 #ifndef __glibcpp_float_tinyness_before
00647 #define __glibcpp_float_tinyness_before false
00648 #endif
00649 
00650 #ifndef __glibcpp_float_round_style
00651 #define __glibcpp_float_round_style round_toward_zero
00652 #endif
00653 
00654 // double
00655 
00656 #if __glibcpp_double_bits == 32
00657 #define __glibcpp_double_min __glibcpp_f32_min
00658 #define __glibcpp_double_max __glibcpp_f32_max
00659 #define __glibcpp_double_digits __glibcpp_f32_digits
00660 #define __glibcpp_double_digits10 __glibcpp_f32_digits10
00661 #define __glibcpp_double_radix __glibcpp_f32_radix
00662 #define __glibcpp_double_epsilon __glibcpp_f32_epsilon
00663 #define __glibcpp_double_round_error __glibcpp_f32_round_error
00664 #define __glibcpp_double_min_exponent __glibcpp_f32_min_exponent
00665 #define __glibcpp_double_min_exponent10 __glibcpp_f32_min_exponent10
00666 #define __glibcpp_double_max_exponent __glibcpp_f32_max_exponent
00667 #define __glibcpp_double_max_exponent10 __glibcpp_f32_max_exponent10
00668 #elif __glibcpp_double_bits == 64
00669 #define __glibcpp_double_min __glibcpp_f64_min
00670 #define __glibcpp_double_max __glibcpp_f64_max
00671 #define __glibcpp_double_digits __glibcpp_f64_digits
00672 #define __glibcpp_double_digits10 __glibcpp_f64_digits10
00673 #define __glibcpp_double_radix __glibcpp_f64_radix
00674 #define __glibcpp_double_epsilon __glibcpp_f64_epsilon
00675 #define __glibcpp_double_round_error __glibcpp_f64_round_error
00676 #define __glibcpp_double_min_exponent __glibcpp_f64_min_exponent
00677 #define __glibcpp_double_min_exponent10 __glibcpp_f64_min_exponent10
00678 #define __glibcpp_double_max_exponent __glibcpp_f64_max_exponent
00679 #define __glibcpp_double_max_exponent10 __glibcpp_f64_max_exponent10
00680 #elif __glibcpp_double_bits == 80
00681 #define __glibcpp_double_min __glibcpp_f80_min
00682 #define __glibcpp_double_max __glibcpp_f80_max
00683 #define __glibcpp_double_digits __glibcpp_f80_digits
00684 #define __glibcpp_double_digits10 __glibcpp_f80_digits10
00685 #define __glibcpp_double_radix __glibcpp_f80_radix
00686 #define __glibcpp_double_epsilon __glibcpp_f80_epsilon
00687 #define __glibcpp_double_round_error __glibcpp_f80_round_error
00688 #define __glibcpp_double_min_exponent __glibcpp_f80_min_exponent
00689 #define __glibcpp_double_min_exponent10 __glibcpp_f80_min_exponent10
00690 #define __glibcpp_double_max_exponent __glibcpp_f80_max_exponent
00691 #define __glibcpp_double_max_exponent10 __glibcpp_f80_max_exponent10
00692 #else
00693 // You must define these macros in the configuration file.
00694 #endif
00695 
00696 // FIXME: These are just stubs and inkorrect
00697 
00698 #ifndef __glibcpp_double_has_infinity
00699 #define __glibcpp_double_has_infinity false
00700 #endif
00701 
00702 #ifndef __glibcpp_double_has_quiet_NaN
00703 #define __glibcpp_double_has_quiet_NaN false
00704 #endif
00705 
00706 #ifndef __glibcpp_double_has_signaling_NaN
00707 #define __glibcpp_double_has_signaling_NaN false
00708 #endif
00709 
00710 #ifndef __glibcpp_double_has_denorm
00711 #define __glibcpp_double_has_denorm denorm_absent
00712 #endif
00713 
00714 #ifndef __glibcpp_double_has_denorm_loss
00715 #define __glibcpp_double_has_denorm_loss false
00716 #endif
00717 
00718 #ifndef __glibcpp_double_infinity
00719 #define __glibcpp_double_infinity 0.0
00720 #endif
00721 
00722 #ifndef __glibcpp_double_quiet_NaN
00723 #define __glibcpp_double_quiet_NaN 0.0
00724 #endif
00725 
00726 #ifndef __glibcpp_double_signaling_NaN
00727 #define __glibcpp_double_signaling_NaN 0.0
00728 #endif
00729 
00730 #ifndef __glibcpp_double_denorm_min
00731 #define __glibcpp_double_denorm_min 0.0
00732 #endif
00733 
00734 #ifndef __glibcpp_double_is_iec559
00735 #define __glibcpp_double_is_iec559 false
00736 #endif
00737 
00738 #ifndef __glibcpp_double_is_bounded
00739 #define __glibcpp_double_is_bounded true
00740 #endif
00741 
00742 #ifndef __glibcpp_double_is_modulo
00743 #define __glibcpp_double_is_modulo false
00744 #endif
00745 
00746 #ifndef __glibcpp_double_traps
00747 #define __glibcpp_double_traps false
00748 #endif
00749 
00750 #ifndef __glibcpp_double_tinyness_before
00751 #define __glibcpp_double_tinyness_before false
00752 #endif
00753 
00754 #ifndef __glibcpp_double_round_style
00755 #define __glibcpp_double_round_style round_toward_zero
00756 #endif
00757 
00758 // long double
00759 
00760 #if __glibcpp_long_double_bits == 32
00761 #define __glibcpp_long_double_min __glibcpp_f32_min
00762 #define __glibcpp_long_double_max __glibcpp_f32_max
00763 #define __glibcpp_long_double_digits __glibcpp_f32_digits
00764 #define __glibcpp_long_double_digits10 __glibcpp_f32_digits10
00765 #define __glibcpp_long_double_radix __glibcpp_f32_radix
00766 #define __glibcpp_long_double_epsilon __glibcpp_f32_epsilon
00767 #define __glibcpp_long_double_round_error __glibcpp_f32_round_error
00768 #define __glibcpp_long_double_min_exponent __glibcpp_f32_min_exponent
00769 #define __glibcpp_long_double_min_exponent10 __glibcpp_f32_min_exponent10
00770 #define __glibcpp_long_double_max_exponent __glibcpp_f32_max_exponent
00771 #define __glibcpp_long_double_max_exponent10 __glibcpp_f32_max_exponent10
00772 #elif __glibcpp_long_double_bits == 64
00773 #define __glibcpp_long_double_min __glibcpp_f64_min
00774 #define __glibcpp_long_double_max __glibcpp_f64_max
00775 #define __glibcpp_long_double_digits __glibcpp_f64_digits
00776 #define __glibcpp_long_double_digits10 __glibcpp_f64_digits10
00777 #define __glibcpp_long_double_radix __glibcpp_f64_radix
00778 #define __glibcpp_long_double_epsilon __glibcpp_f64_epsilon
00779 #define __glibcpp_long_double_round_error __glibcpp_f64_round_error
00780 #define __glibcpp_long_double_min_exponent __glibcpp_f64_min_exponent
00781 #define __glibcpp_long_double_min_exponent10 __glibcpp_f64_min_exponent10
00782 #define __glibcpp_long_double_max_exponent __glibcpp_f64_max_exponent
00783 #define __glibcpp_long_double_max_exponent10 __glibcpp_f64_max_exponent10
00784 #elif __glibcpp_long_double_bits == 80
00785 #define __glibcpp_long_double_min __glibcpp_f80_min
00786 #define __glibcpp_long_double_max __glibcpp_f80_max
00787 #define __glibcpp_long_double_digits __glibcpp_f80_digits
00788 #define __glibcpp_long_double_digits10 __glibcpp_f80_digits10
00789 #define __glibcpp_long_double_radix __glibcpp_f80_radix
00790 #define __glibcpp_long_double_epsilon __glibcpp_f80_epsilon
00791 #define __glibcpp_long_double_round_error __glibcpp_f80_round_error
00792 #define __glibcpp_long_double_min_exponent __glibcpp_f80_min_exponent
00793 #define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10
00794 #define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent
00795 #define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10
00796 #elif __glibcpp_long_double_bits == 96
00797 #define __glibcpp_long_double_min __glibcpp_f96_min
00798 #define __glibcpp_long_double_max __glibcpp_f96_max
00799 #define __glibcpp_long_double_digits __glibcpp_f96_digits
00800 #define __glibcpp_long_double_digits10 __glibcpp_f96_digits10
00801 #define __glibcpp_long_double_radix __glibcpp_f96_radix
00802 #define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon
00803 #define __glibcpp_long_double_round_error __glibcpp_f96_round_error
00804 #define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent
00805 #define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10
00806 #define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent
00807 #define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10
00808 #elif __glibcpp_long_double_bits == 128
00809 #define __glibcpp_long_double_min __glibcpp_f128_min
00810 #define __glibcpp_long_double_max __glibcpp_f128_max
00811 #define __glibcpp_long_double_digits __glibcpp_f128_digits
00812 #define __glibcpp_long_double_digits10 __glibcpp_f128_digits10
00813 #define __glibcpp_long_double_radix __glibcpp_f128_radix
00814 #define __glibcpp_long_double_epsilon __glibcpp_f128_epsilon
00815 #define __glibcpp_long_double_round_error __glibcpp_f128_round_error
00816 #define __glibcpp_long_double_min_exponent __glibcpp_f128_min_exponent
00817 #define __glibcpp_long_double_min_exponent10 __glibcpp_f128_min_exponent10
00818 #define __glibcpp_long_double_max_exponent __glibcpp_f128_max_exponent
00819 #define __glibcpp_long_double_max_exponent10 __glibcpp_f128_max_exponent10
00820 #else
00821 // You must define these macros in the configuration file.
00822 #endif
00823 
00824 // FIXME: These are just stubs and inkorrect
00825 
00826 #ifndef __glibcpp_long_double_has_infinity
00827 #define __glibcpp_long_double_has_infinity false
00828 #endif
00829 
00830 #ifndef __glibcpp_long_double_has_quiet_NaN
00831 #define __glibcpp_long_double_has_quiet_NaN false
00832 #endif
00833 
00834 #ifndef __glibcpp_long_double_has_signaling_NaN
00835 #define __glibcpp_long_double_has_signaling_NaN false
00836 #endif
00837 
00838 #ifndef __glibcpp_long_double_has_denorm
00839 #define __glibcpp_long_double_has_denorm denorm_absent
00840 #endif
00841 
00842 #ifndef __glibcpp_long_double_has_denorm_loss
00843 #define __glibcpp_long_double_has_denorm_loss false
00844 #endif
00845 
00846 #ifndef __glibcpp_long_double_infinity
00847 #define __glibcpp_long_double_infinity 0.0L
00848 #endif
00849 
00850 #ifndef __glibcpp_long_double_quiet_NaN
00851 #define __glibcpp_long_double_quiet_NaN 0.0L
00852 #endif
00853 
00854 #ifndef __glibcpp_long_double_signaling_NaN
00855 #define __glibcpp_long_double_signaling_NaN 0.0L
00856 #endif
00857 
00858 #ifndef __glibcpp_long_double_denorm_min
00859 #define __glibcpp_long_double_denorm_min 0.0L
00860 #endif
00861 
00862 #ifndef __glibcpp_long_double_is_iec559
00863 #define __glibcpp_long_double_is_iec559 false
00864 #endif
00865 
00866 #ifndef __glibcpp_long_double_is_bounded
00867 #define __glibcpp_long_double_is_bounded true
00868 #endif
00869 
00870 #ifndef __glibcpp_long_double_is_modulo
00871 #define __glibcpp_long_double_is_modulo false
00872 #endif
00873 
00874 #ifndef __glibcpp_long_double_traps
00875 #define __glibcpp_long_double_traps false
00876 #endif
00877 
00878 #ifndef __glibcpp_long_double_tinyness_before
00879 #define __glibcpp_long_double_tinyness_before false
00880 #endif
00881 
00882 #ifndef __glibcpp_long_double_round_style
00883 #define __glibcpp_long_double_round_style round_toward_zero
00884 #endif
00885 
00886 
00887 namespace std
00888 {
00889   enum float_round_style 
00890   {
00891     round_indeterminate       = -1,
00892     round_toward_zero         = 0,
00893     round_to_nearest          = 1,
00894     round_toward_infinity     = 2,
00895     round_toward_neg_infinity = 3
00896   };
00897 
00898   enum float_denorm_style 
00899   {
00900     denorm_indeterminate = -1,
00901     denorm_absent        = 0,
00902     denorm_present       = 1
00903   };
00904 
00905   //
00906   // The primary class traits
00907   //
00908   struct __numeric_limits_base
00909   {
00910     static const bool is_specialized = false;
00911 
00912     static const int digits = 0;
00913     static const int digits10 = 0;
00914     static const bool is_signed = false;
00915     static const bool is_integer = false;
00916     static const bool is_exact = false;
00917     static const int radix = 0;
00918 
00919     static const int min_exponent = 0;
00920     static const int min_exponent10 = 0;
00921     static const int max_exponent = 0;
00922     static const int max_exponent10 = 0;
00923     
00924     static const bool has_infinity = false;
00925     static const bool has_quiet_NaN = false;
00926     static const bool has_signaling_NaN = false;
00927     static const float_denorm_style has_denorm = denorm_absent;
00928     static const bool has_denorm_loss = false;
00929 
00930     static const bool is_iec559 = false;
00931     static const bool is_bounded = false;
00932     static const bool is_modulo = false;
00933 
00934     static const bool traps = false;
00935     static const bool tinyness_before = false;
00936     static const float_round_style round_style = round_toward_zero;
00937   };
00938 
00939   template<typename _Tp> 
00940     struct numeric_limits : public __numeric_limits_base 
00941     {
00942       static _Tp min() throw() { return static_cast<_Tp>(0); }
00943       static _Tp max() throw() { return static_cast<_Tp>(0); }
00944       static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
00945       static _Tp round_error() throw() { return static_cast<_Tp>(0); }
00946       static _Tp infinity() throw()  { return static_cast<_Tp>(0); }
00947       static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
00948       static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
00949       static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
00950     };
00951 
00952   // Now there follow 15 explicit specializations.  Yes, 15.  Make sure
00953   // you get the count right.  
00954   template<>
00955     struct numeric_limits<bool>
00956     {
00957       static const bool is_specialized = true;
00958 
00959       static bool min() throw()
00960       { return false; }
00961 
00962       static bool max() throw()
00963       { return true; }
00964 
00965       static const int digits = __glibcpp_bool_digits;
00966       static const int digits10 = 0;
00967       static const bool is_signed = false;
00968       static const bool is_integer = true;
00969       static const bool is_exact = true;
00970       static const int radix = 2;
00971       static bool epsilon() throw()
00972       { return false; }
00973       static bool round_error() throw()
00974       { return false; }
00975 
00976       static const int min_exponent = 0;
00977       static const int min_exponent10 = 0;
00978       static const int max_exponent = 0;
00979       static const int max_exponent10 = 0;
00980 
00981       static const bool has_infinity = false;
00982       static const bool has_quiet_NaN = false;
00983       static const bool has_signaling_NaN = false;
00984       static const float_denorm_style has_denorm = denorm_absent;
00985       static const bool has_denorm_loss = false;
00986 
00987       static bool infinity() throw()
00988       { return false; }
00989       static bool quiet_NaN() throw()
00990       { return false; }
00991       static bool signaling_NaN() throw()
00992       { return false; }
00993       static bool denorm_min() throw()
00994       { return false; }
00995 
00996       static const bool is_iec559 = false;
00997       static const bool is_bounded = true;
00998       static const bool is_modulo = false;
00999 
01000       // It is not clear what it means for a boolean type to trap.
01001       // This is a DR on the LWG issue list.  Here, I use integer
01002       // promotion semantics.
01003       static const bool traps = __glibcpp_signed_int_traps
01004                || __glibcpp_signed_long_traps;
01005       static const bool tinyness_before = false;
01006       static const float_round_style round_style = round_toward_zero;
01007     };
01008 
01009 #undef __glibcpp_bool_digits  
01010   
01011   template<>
01012     struct numeric_limits<char>
01013     {
01014       static const bool is_specialized = true;
01015 
01016       static char min() throw()
01017       { return __glibcpp_char_min; }
01018       static char max() throw()
01019       { return __glibcpp_char_max; }
01020 
01021       static const int digits = __glibcpp_char_digits;
01022       static const int digits10 = __glibcpp_char_digits10;
01023       static const bool is_signed = __glibcpp_plain_char_is_signed;
01024       static const bool is_integer = true;
01025       static const bool is_exact = true;
01026       static const int radix = 2;
01027       static char epsilon() throw()
01028       { return char(); }
01029       static char round_error() throw()
01030       { return char(); }
01031 
01032       static const int min_exponent = 0;
01033       static const int min_exponent10 = 0;
01034       static const int max_exponent = 0;
01035       static const int max_exponent10 = 0;
01036 
01037       static const bool has_infinity = false;
01038       static const bool has_quiet_NaN = false;
01039       static const bool has_signaling_NaN = false;
01040       static const float_denorm_style has_denorm = denorm_absent;
01041       static const bool has_denorm_loss = false;
01042 
01043       static char infinity() throw()
01044       { return char(); }
01045       static char quiet_NaN() throw()
01046       { return char(); }
01047       static char signaling_NaN() throw()
01048       { return char(); }
01049       static char denorm_min() throw()
01050       { return static_cast<char>(0); }
01051 
01052       static const bool is_iec559 = false;
01053       static const bool is_bounded = true;
01054       static const bool is_modulo = __glibcpp_char_is_modulo;
01055 
01056       static const bool traps = __glibcpp_char_traps;
01057       static const bool tinyness_before = false;
01058       static const float_round_style round_style = round_toward_zero;
01059     };
01060 
01061 #undef __glibcpp_char_min
01062 #undef __glibcpp_char_max  
01063 #undef __glibcpp_char_digits
01064 #undef __glibcpp_char_digits10
01065 #undef __glibcpp_char_is_signed
01066 #undef __glibcpp_char_is_modulo
01067 #undef __glibcpp_char_traps
01068 
01069 
01070 
01071   template<>
01072     struct numeric_limits<signed char>
01073     {
01074       static const bool is_specialized = true;
01075 
01076       static signed char min() throw()
01077       { return __glibcpp_signed_char_min; }
01078       static signed char max() throw()
01079       { return __glibcpp_signed_char_max; }
01080 
01081       static const int digits = __glibcpp_signed_char_digits;
01082       static const int digits10 = __glibcpp_signed_char_digits10;
01083       static const bool is_signed = true;
01084       static const bool is_integer = true;
01085       static const bool is_exact = true;
01086       static const int radix = 2;
01087       static signed char epsilon() throw()
01088       { return 0; }
01089       static signed char round_error() throw()
01090       { return 0; }
01091 
01092       static const int min_exponent = 0;
01093       static const int min_exponent10 = 0;
01094       static const int max_exponent = 0;
01095       static const int max_exponent10 = 0;
01096 
01097       static const bool has_infinity = false;
01098       static const bool has_quiet_NaN = false;
01099       static const bool has_signaling_NaN = false;
01100       static const float_denorm_style has_denorm = denorm_absent;
01101       static const bool has_denorm_loss = false;
01102 
01103       static signed char infinity() throw()
01104       { return static_cast<signed char>(0); }
01105       static signed char quiet_NaN() throw()
01106       { return static_cast<signed char>(0); }
01107       static signed char signaling_NaN() throw()
01108       { return static_cast<signed char>(0); }
01109       static signed char denorm_min() throw()
01110       { return static_cast<signed char>(0); }
01111 
01112       static const bool is_iec559 = false;
01113       static const bool is_bounded = true;
01114       static const bool is_modulo = __glibcpp_signed_char_is_modulo;
01115 
01116       static const bool traps = __glibcpp_signed_char_traps;
01117       static const bool tinyness_before = false;
01118       static const float_round_style round_style = round_toward_zero;
01119     };
01120 
01121 #undef __glibcpp_signed_char_min
01122 #undef __glibcpp_signed_char_max
01123 #undef __glibcpp_signed_char_digits
01124 #undef __glibcpp_signed_char_digits10
01125 #undef __glibcpp_signed_char_is_modulo  
01126 #undef __glibcpp_signed_char_traps  
01127 
01128   template<>
01129     struct numeric_limits<unsigned char>
01130     {
01131       static const bool is_specialized = true;
01132 
01133       static unsigned char min() throw()
01134       { return 0; }
01135       static unsigned char max() throw()
01136       { return __glibcpp_unsigned_char_max; }
01137 
01138       static const int digits = __glibcpp_unsigned_char_digits;
01139       static const int digits10 = __glibcpp_unsigned_char_digits10;
01140       static const bool is_signed = false;
01141       static const bool is_integer = true;
01142       static const bool is_exact = true;
01143       static const int radix = 2;
01144       static unsigned char epsilon() throw()
01145       { return 0; }
01146       static unsigned char round_error() throw()
01147       { return 0; }
01148 
01149       static const int min_exponent = 0;
01150       static const int min_exponent10 = 0;
01151       static const int max_exponent = 0;
01152       static const int max_exponent10 = 0;
01153 
01154       static const bool has_infinity = false;
01155       static const bool has_quiet_NaN = false;
01156       static const bool has_signaling_NaN = false;
01157       static const float_denorm_style has_denorm = denorm_absent;
01158       static const bool has_denorm_loss = false;
01159 
01160       static unsigned char infinity() throw()
01161       { return static_cast<unsigned char>(0); }
01162       static unsigned char quiet_NaN() throw()
01163       { return static_cast<unsigned char>(0); }
01164       static unsigned char signaling_NaN() throw()
01165       { return static_cast<unsigned char>(0); }
01166       static unsigned char denorm_min() throw()
01167       { return static_cast<unsigned char>(0); }
01168 
01169       static const bool is_iec559 = false;
01170       static const bool is_bounded = true;
01171       static const bool is_modulo = true;
01172 
01173       static const bool traps = __glibcpp_unsigned_char_traps;
01174       static const bool tinyness_before = false;
01175       static const float_round_style round_style = round_toward_zero;
01176     };
01177 
01178 #undef __glibcpp_unsigned_char_max
01179 #undef __glibcpp_unsigned_char_digits
01180 #undef __glibcpp_unsigned_char_digits10
01181 #undef __glibcpp_unsigned_char_traps  
01182 
01183   template<>
01184     struct numeric_limits<wchar_t>
01185     {
01186       static const bool is_specialized = true;
01187 
01188       static wchar_t min() throw()
01189       { return __glibcpp_wchar_t_min; }
01190       static wchar_t max() throw()
01191       { return __glibcpp_wchar_t_max; }
01192 
01193       static const int digits = __glibcpp_wchar_t_digits;
01194       static const int digits10 = __glibcpp_wchar_t_digits10;
01195       static const bool is_signed = __glibcpp_wchar_t_is_signed;
01196       static const bool is_integer = true;
01197       static const bool is_exact = true;
01198       static const int radix = 2;
01199       static wchar_t epsilon() throw()
01200       { return 0; }
01201       static wchar_t round_error() throw()
01202       { return 0; }
01203 
01204       static const int min_exponent = 0;
01205       static const int min_exponent10 = 0;
01206       static const int max_exponent = 0;
01207       static const int max_exponent10 = 0;
01208 
01209       static const bool has_infinity = false;
01210       static const bool has_quiet_NaN = false;
01211       static const bool has_signaling_NaN = false;
01212       static const float_denorm_style has_denorm = denorm_absent;
01213       static const bool has_denorm_loss = false;
01214 
01215       static wchar_t infinity() throw()
01216       { return wchar_t(); }
01217       static wchar_t quiet_NaN() throw()
01218       { return wchar_t(); }
01219       static wchar_t signaling_NaN() throw()
01220       { return wchar_t(); }
01221       static wchar_t denorm_min() throw()
01222       { return wchar_t(); }
01223 
01224       static const bool is_iec559 = false;
01225       static const bool is_bounded = true;
01226       static const bool is_modulo = __glibcpp_wchar_t_is_modulo;
01227 
01228       static const bool traps = __glibcpp_wchar_t_traps;
01229       static const bool tinyness_before = false;
01230       static const float_round_style round_style = round_toward_zero;
01231     };
01232 
01233 #undef __glibcpp_wchar_t_min
01234 #undef __glibcpp_wchar_t_max
01235 #undef __glibcpp_wchar_t_digits
01236 #undef __glibcpp_wchar_t_digits10  
01237 #undef __glibcpp_wchar_t_is_signed
01238 #undef __glibcpp_wchar_t_is_modulo
01239 #undef __glibcpp_wchar_t_traps  
01240   
01241   template<>
01242     struct numeric_limits<short>
01243     {
01244       static const bool is_specialized = true;
01245 
01246       static short min() throw()
01247       { return __glibcpp_signed_short_min; }
01248       static short max() throw()
01249       { return __glibcpp_signed_short_max; }
01250 
01251       static const int digits = __glibcpp_signed_short_digits;
01252       static const int digits10 = __glibcpp_signed_short_digits10;
01253       static const bool is_signed = true;
01254       static const bool is_integer = true;
01255       static const bool is_exact = true;
01256       static const int radix = 2;
01257       static short epsilon() throw()
01258       { return 0; }
01259       static short round_error() throw()
01260       { return 0; }
01261 
01262       static const int min_exponent = 0;
01263       static const int min_exponent10 = 0;
01264       static const int max_exponent = 0;
01265       static const int max_exponent10 = 0;
01266 
01267       static const bool has_infinity = false;
01268       static const bool has_quiet_NaN = false;
01269       static const bool has_signaling_NaN = false;
01270       static const float_denorm_style has_denorm = denorm_absent;
01271       static const bool has_denorm_loss = false;
01272 
01273       static short infinity() throw()
01274       { return short(); }
01275       static short quiet_NaN() throw()
01276       { return short(); }
01277       static short signaling_NaN() throw()
01278       { return short(); }
01279       static short denorm_min() throw()
01280       { return short(); }
01281 
01282       static const bool is_iec559 = true;
01283       static const bool is_bounded = true;
01284       static const bool is_modulo = __glibcpp_signed_short_is_modulo;
01285 
01286       static const bool traps = __glibcpp_signed_short_traps;
01287       static const bool tinyness_before = false;
01288       static const float_round_style round_style = round_toward_zero;
01289     };
01290 
01291 #undef __glibcpp_signed_short_min
01292 #undef __glibcpp_signed_short_max
01293 #undef __glibcpp_signed_short_digits
01294 #undef __glibcpp_signed_short_digits10
01295 #undef __glibcpp_signed_short_is_modulo
01296 #undef __glibcpp_signed_short_traps  
01297   
01298   template<>
01299     struct numeric_limits<unsigned short>
01300     {
01301       static const bool is_specialized = true;
01302 
01303       static unsigned short min() throw()
01304       { return 0; }
01305       static unsigned short max() throw()
01306       { return __glibcpp_unsigned_short_max; }
01307 
01308       static const int digits = __glibcpp_unsigned_short_digits;
01309       static const int digits10 = __glibcpp_unsigned_short_digits10;
01310       static const bool is_signed = false;
01311       static const bool is_integer = true;
01312       static const bool is_exact = true;
01313       static const int radix = 2;
01314       static unsigned short epsilon() throw()
01315       { return 0; }
01316       static unsigned short round_error() throw()
01317       { return 0; }
01318 
01319       static const int min_exponent = 0;
01320       static const int min_exponent10 = 0;
01321       static const int max_exponent = 0;
01322       static const int max_exponent10 = 0;
01323 
01324       static const bool has_infinity = false;
01325       static const bool has_quiet_NaN = false;
01326       static const bool has_signaling_NaN = false;
01327       static const float_denorm_style has_denorm = denorm_absent;
01328       static const bool has_denorm_loss = false;
01329 
01330       static unsigned short infinity() throw()
01331       { return static_cast<unsigned short>(0); }
01332       static unsigned short quiet_NaN() throw()
01333       { return static_cast<unsigned short>(0); }
01334       static unsigned short signaling_NaN() throw()
01335       { return static_cast<unsigned short>(0); }
01336       static unsigned short denorm_min() throw()
01337       { return static_cast<unsigned short>(0); }
01338 
01339       static const bool is_iec559 = true;
01340       static const bool is_bounded = true;
01341       static const bool is_modulo = true;
01342 
01343       static const bool traps = __glibcpp_unsigned_short_traps;
01344       static const bool tinyness_before = false;
01345       static const float_round_style round_style = round_toward_zero;
01346     };
01347 
01348 #undef __glibcpp_unsigned_short_max
01349 #undef __glibcpp_unsigned_short_digits
01350 #undef __glibcpp_unsigned_short_digits10
01351 #undef __glibcpp_unsigned_short_traps  
01352   
01353   template<>
01354     struct numeric_limits<int>
01355     {
01356       static const bool is_specialized = true;
01357 
01358       static int min() throw()
01359       { return __glibcpp_signed_int_min; }
01360       static int max() throw()
01361       { return __glibcpp_signed_int_max; }
01362 
01363       static const int digits = __glibcpp_signed_int_digits;
01364       static const int digits10 = __glibcpp_signed_int_digits10;
01365       static const bool is_signed = true;
01366       static const bool is_integer = true;
01367       static const bool is_exact = true;
01368       static const int radix = 2;
01369       static int epsilon() throw()
01370       { return 0; }
01371       static int round_error() throw()
01372       { return 0; }
01373 
01374       static const int min_exponent = 0;
01375       static const int min_exponent10 = 0;
01376       static const int max_exponent = 0;
01377       static const int max_exponent10 = 0;
01378 
01379       static const bool has_infinity = false;
01380       static const bool has_quiet_NaN = false;
01381       static const bool has_signaling_NaN = false;
01382       static const float_denorm_style has_denorm = denorm_absent;
01383       static const bool has_denorm_loss = false;
01384 
01385       static int infinity() throw()
01386       { return static_cast<int>(0); }
01387       static int quiet_NaN() throw()
01388       { return static_cast<int>(0); }
01389       static int signaling_NaN() throw()
01390       { return static_cast<int>(0); }
01391       static int denorm_min() throw()
01392       { return static_cast<int>(0); }
01393 
01394       static const bool is_iec559 = true;
01395       static const bool is_bounded = true;
01396       static const bool is_modulo = __glibcpp_signed_int_is_modulo;
01397 
01398       static const bool traps = __glibcpp_signed_int_traps;
01399       static const bool tinyness_before = false;
01400       static const float_round_style round_style = round_toward_zero;
01401     };
01402 
01403 #undef __glibcpp_signed_int_min
01404 #undef __glibcpp_signed_int_max
01405 #undef __glibcpp_signed_int_digits
01406 #undef __glibcpp_signed_int_digits10
01407 #undef __glibcpp_signed_int_is_modulo
01408 #undef __glibcpp_signed_int_traps  
01409   
01410   template<>
01411     struct numeric_limits<unsigned int>
01412     {
01413       static const bool is_specialized = true;
01414 
01415       static unsigned int min() throw()
01416       { return 0; }
01417           static unsigned int max() throw()
01418       { return __glibcpp_unsigned_int_max; }
01419 
01420       static const int digits = __glibcpp_unsigned_int_digits;
01421       static const int digits10 = __glibcpp_unsigned_int_digits10;
01422       static const bool is_signed = false;
01423       static const bool is_integer = true;
01424       static const bool is_exact = true;
01425       static const int radix = 2;
01426       static unsigned int epsilon() throw()
01427       { return 0; }
01428       static unsigned int round_error() throw()
01429       { return 0; }
01430 
01431       static const int min_exponent = 0;
01432       static const int min_exponent10 = 0;
01433       static const int max_exponent = 0;
01434       static const int max_exponent10 = 0;
01435 
01436       static const bool has_infinity = false;
01437       static const bool has_quiet_NaN = false;
01438       static const bool has_signaling_NaN = false;
01439       static const float_denorm_style has_denorm = denorm_absent;
01440       static const bool has_denorm_loss = false;
01441 
01442       static unsigned int infinity() throw()
01443       { return static_cast<unsigned int>(0); }
01444       static unsigned int quiet_NaN() throw()
01445       { return static_cast<unsigned int>(0); }
01446       static unsigned int signaling_NaN() throw()
01447       { return static_cast<unsigned int>(0); }
01448       static unsigned int denorm_min() throw()
01449       { return static_cast<unsigned int>(0); }
01450 
01451       static const bool is_iec559 = true;
01452       static const bool is_bounded = true;
01453       static const bool is_modulo = true;
01454 
01455       static const bool traps = __glibcpp_unsigned_int_traps;
01456       static const bool tinyness_before = false;
01457       static const float_round_style round_style = round_toward_zero;
01458     };
01459 
01460 #undef __glibcpp_unsigned_int_max
01461 #undef __glibcpp_unsigned_int_digits
01462 #undef __glibcpp_unsigned_int_digits10
01463 #undef __glibcpp_unsigned_int_traps  
01464 
01465   template<>
01466     struct numeric_limits<long>
01467     {
01468       static const bool is_specialized = true;
01469 
01470       static long min() throw()
01471       { return __glibcpp_signed_long_min; }
01472       static long max() throw()
01473       { return __glibcpp_signed_long_max; }
01474 
01475       static const int digits = __glibcpp_signed_long_digits;
01476       static const int digits10 = __glibcpp_signed_long_digits10;
01477       static const bool is_signed = true;
01478       static const bool is_integer = true;
01479       static const bool is_exact = true;
01480       static const int radix = 2;
01481       static long epsilon() throw()
01482       { return 0; }
01483       static long round_error() throw()
01484       { return 0; }
01485 
01486       static const int min_exponent = 0;
01487       static const int min_exponent10 = 0;
01488       static const int max_exponent = 0;
01489       static const int max_exponent10 = 0;
01490 
01491       static const bool has_infinity = false;
01492       static const bool has_quiet_NaN = false;
01493       static const bool has_signaling_NaN = false;
01494       static const float_denorm_style has_denorm = denorm_absent;
01495       static const bool has_denorm_loss = false;
01496 
01497       static long infinity() throw()
01498       { return static_cast<long>(0); }
01499       static long quiet_NaN() throw()
01500       { return static_cast<long>(0); }
01501       static long signaling_NaN() throw()
01502       { return static_cast<long>(0); }
01503       static long denorm_min() throw()
01504       { return static_cast<long>(0); }
01505 
01506       static const bool is_iec559 = true;
01507       static const bool is_bounded = true;
01508       static const bool is_modulo = __glibcpp_signed_long_is_modulo;
01509 
01510       static const bool traps = __glibcpp_signed_long_traps;
01511       static const bool tinyness_before = false;
01512       static const float_round_style round_style = round_toward_zero;
01513     };
01514 
01515 #undef __glibcpp_signed_long_min
01516 #undef __glibcpp_signed_long_max
01517 #undef __glibcpp_signed_long_digits
01518 #undef __glibcpp_signed_long_digits10
01519 #undef __glibcpp_signed_long_is_modulo
01520 #undef __glibcpp_signed_long_traps  
01521   
01522   template<>
01523     struct numeric_limits<unsigned long>
01524     {
01525       static const bool is_specialized = true;
01526 
01527       static unsigned long min() throw()
01528       { return 0; }
01529       static unsigned long max() throw()
01530       { return __glibcpp_unsigned_long_max; }
01531 
01532       static const int digits = __glibcpp_unsigned_long_digits;
01533       static const int digits10 = __glibcpp_unsigned_long_digits10;
01534       static const bool is_signed = false;
01535       static const bool is_integer = true;
01536       static const bool is_exact = true;
01537       static const int radix = 2;
01538       static unsigned long epsilon() throw()
01539       { return 0; }
01540       static unsigned long round_error() throw()
01541       { return 0; }
01542 
01543       static const int min_exponent = 0;
01544       static const int min_exponent10 = 0;
01545       static const int max_exponent = 0;
01546       static const int max_exponent10 = 0;
01547 
01548       static const bool has_infinity = false;
01549       static const bool has_quiet_NaN = false;
01550       static const bool has_signaling_NaN = false;
01551       static const float_denorm_style has_denorm = denorm_absent;
01552       static const bool has_denorm_loss = false;
01553 
01554       static unsigned long infinity() throw()
01555       { return static_cast<unsigned long>(0); }
01556       static unsigned long quiet_NaN() throw()
01557       { return static_cast<unsigned long>(0); }
01558       static unsigned long signaling_NaN() throw()
01559       { return static_cast<unsigned long>(0); }
01560       static unsigned long denorm_min() throw()
01561       { return static_cast<unsigned long>(0); }
01562 
01563       static const bool is_iec559 = true;
01564       static const bool is_bounded = true;
01565       static const bool is_modulo = true;
01566 
01567       static const bool traps = __glibcpp_unsigned_long_traps;
01568       static const bool tinyness_before = false;
01569       static const float_round_style round_style = round_toward_zero;
01570     };
01571 
01572 #undef __glibcpp_unsigned_long_max
01573 #undef __glibcpp_unsigned_long_digits
01574 #undef __glibcpp_unsigned_long_digits10
01575 #undef __glibcpp_unsigned_long_traps  
01576 
01577   template<>
01578     struct numeric_limits<long long>
01579     {
01580       static const bool is_specialized = true;
01581       
01582       static long long min() throw()
01583       { return __glibcpp_signed_long_long_min; }
01584       static long long max() throw()
01585       { return __glibcpp_signed_long_long_max; }
01586       
01587       static const int digits = __glibcpp_signed_long_long_digits;
01588       static const int digits10 = __glibcpp_signed_long_long_digits10;
01589       static const bool is_signed = true;
01590       static const bool is_integer = true;
01591       static const bool is_exact = true;
01592       static const int radix = 2;
01593       static long long epsilon() throw()
01594       { return 0; }
01595       static long long round_error() throw()
01596       { return 0; }
01597       
01598       static const int min_exponent = 0;
01599       static const int min_exponent10 = 0;
01600       static const int max_exponent = 0;
01601       static const int max_exponent10 = 0;
01602       
01603       static const bool has_infinity = false;
01604       static const bool has_quiet_NaN = false;
01605       static const bool has_signaling_NaN = false;
01606       static const float_denorm_style has_denorm = denorm_absent;
01607       static const bool has_denorm_loss = false;
01608       
01609       static long long infinity() throw()
01610       { return static_cast<long long>(0); }
01611       static long long quiet_NaN() throw()
01612       { return static_cast<long long>(0); }
01613       static long long signaling_NaN() throw()
01614       { return static_cast<long long>(0); }
01615       static long long denorm_min() throw()
01616       { return static_cast<long long>(0); }
01617       
01618       static const bool is_iec559 = true;
01619       static const bool is_bounded = true;
01620       static const bool is_modulo = __glibcpp_signed_long_long_is_modulo;
01621 
01622       static const bool traps = __glibcpp_signed_long_long_traps;
01623       static const bool tinyness_before = false;
01624       static const float_round_style round_style = round_toward_zero;
01625     };
01626 
01627 #undef __glibcpp_signed_long_long_min
01628 #undef __glibcpp_signed_long_long_max
01629 #undef __glibcpp_signed_long_long_digits
01630 #undef __glibcpp_signed_long_long_digits10
01631 #undef __glibcpp_signed_long_long_is_modulo
01632 #undef __glibcpp_signed_long_long_traps  
01633   
01634   template<>
01635     struct numeric_limits<unsigned long long>
01636     {
01637       static const bool is_specialized = true;
01638 
01639       static unsigned long long min() throw()
01640       { return 0; }
01641       static unsigned long long max() throw()
01642       { return __glibcpp_unsigned_long_long_max; }
01643 
01644       static const int digits = __glibcpp_unsigned_long_long_digits;
01645       static const int digits10 = __glibcpp_unsigned_long_long_digits10;
01646       static const bool is_signed = false;
01647       static const bool is_integer = true;
01648       static const bool is_exact = true;
01649       static const int radix = 2;
01650       static unsigned long long epsilon() throw()
01651       { return 0; }
01652       static unsigned long long round_error() throw()
01653       { return 0; }
01654 
01655       static const int min_exponent = 0;
01656       static const int min_exponent10 = 0;
01657       static const int max_exponent = 0;
01658       static const int max_exponent10 = 0;
01659 
01660       static const bool has_infinity = false;
01661       static const bool has_quiet_NaN = false;
01662       static const bool has_signaling_NaN = false;
01663       static const float_denorm_style has_denorm = denorm_absent;
01664       static const bool has_denorm_loss = false;
01665 
01666       static unsigned long long infinity() throw()
01667       { return static_cast<unsigned long long>(0); }
01668       static unsigned long long quiet_NaN() throw()
01669       { return static_cast<unsigned long long>(0); }
01670       static unsigned long long signaling_NaN() throw()
01671       { return static_cast<unsigned long long>(0); }
01672       static unsigned long long denorm_min() throw()
01673       { return static_cast<unsigned long long>(0); }
01674 
01675       static const bool is_iec559 = true;
01676       static const bool is_bounded = true;
01677       static const bool is_modulo = true;
01678 
01679       static const bool traps = true;
01680       static const bool tinyness_before = false;
01681       static const float_round_style round_style = round_toward_zero;
01682     };
01683 
01684 #undef __glibcpp_unsigned_long_long_max
01685 #undef __glibcpp_unsigned_long_long_digits
01686 #undef __glibcpp_unsigned_long_long_digits10
01687 #undef __glibcpp_unsigned_long_long_traps  
01688 
01689   template<>
01690     struct numeric_limits<float>
01691     {
01692       static const bool is_specialized = true;
01693 
01694       static float min() throw()
01695       { return __glibcpp_float_min; }
01696       static float max() throw()
01697       { return __glibcpp_float_max; }
01698 
01699       static const int digits = __glibcpp_float_digits;
01700       static const int digits10 = __glibcpp_float_digits10;
01701       static const bool is_signed = true;
01702       static const bool is_integer = false;
01703       static const bool is_exact = false;
01704       static const int radix = __glibcpp_float_radix;
01705       static float epsilon() throw()
01706       { return __glibcpp_float_epsilon; }
01707       static float round_error() throw()
01708       { return __glibcpp_float_round_error; }
01709 
01710       static const int min_exponent = __glibcpp_float_min_exponent;
01711       static const int min_exponent10 = __glibcpp_float_min_exponent10;
01712       static const int max_exponent = __glibcpp_float_max_exponent;
01713       static const int max_exponent10 = __glibcpp_float_max_exponent10;
01714 
01715       static const bool has_infinity = __glibcpp_float_has_infinity;
01716       static const bool has_quiet_NaN = __glibcpp_float_has_quiet_NaN;
01717       static const bool has_signaling_NaN = __glibcpp_float_has_signaling_NaN;
01718       static const float_denorm_style has_denorm = __glibcpp_float_has_denorm;
01719       static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss;
01720 
01721       static float infinity() throw()
01722       { return __glibcpp_float_infinity; }
01723       static float quiet_NaN() throw()
01724       { return __glibcpp_float_quiet_NaN; }
01725       static float signaling_NaN() throw()
01726       { return __glibcpp_float_signaling_NaN; }
01727       static float denorm_min() throw()
01728       { return __glibcpp_float_denorm_min; }
01729 
01730       static const bool is_iec559 = __glibcpp_float_is_iec559;
01731       static const bool is_bounded = __glibcpp_float_is_bounded;
01732       static const bool is_modulo = __glibcpp_float_is_modulo;
01733 
01734       static const bool traps = __glibcpp_float_traps;
01735       static const bool tinyness_before = __glibcpp_float_tinyness_before;
01736       static const float_round_style round_style = __glibcpp_float_round_style;
01737     };
01738 
01739 #undef __glibcpp_float_min
01740 #undef __glibcpp_float_max
01741 #undef __glibcpp_float_digits
01742 #undef __glibcpp_float_digits10
01743 #undef __glibcpp_float_radix
01744 #undef __glibcpp_float_round_error
01745 #undef __glibcpp_float_min_exponent
01746 #undef __glibcpp_float_min_exponent10
01747 #undef __glibcpp_float_max_exponent
01748 #undef __glibcpp_float_max_exponent10
01749 #undef __glibcpp_float_has_infinity
01750 #undef __glibcpp_float_has_quiet_NaN
01751 #undef __glibcpp_float_has_signaling_NaN
01752 #undef __glibcpp_float_has_denorm
01753 #undef __glibcpp_float_has_denorm_loss
01754 #undef __glibcpp_float_infinity
01755 #undef __glibcpp_float_quiet_NaN
01756 #undef __glibcpp_float_signaling_NaN
01757 #undef __glibcpp_float_denorm_min
01758 #undef __glibcpp_float_is_iec559
01759 #undef __glibcpp_float_is_bounded
01760 #undef __glibcpp_float_is_modulo
01761 #undef __glibcpp_float_traps
01762 #undef __glibcpp_float_tinyness_before
01763 #undef __glibcpp_float_round_style  
01764 
01765   template<>
01766     struct numeric_limits<double>
01767     {
01768       static const bool is_specialized = true;
01769 
01770       static double min() throw()
01771       { return __glibcpp_double_min; }
01772       static double max() throw()
01773       { return __glibcpp_double_max; }
01774 
01775       static const int digits = __glibcpp_double_digits;
01776       static const int digits10 = __glibcpp_double_digits10;
01777       static const bool is_signed = true;
01778       static const bool is_integer = false;
01779       static const bool is_exact = false;
01780       static const int radix = __glibcpp_double_radix;
01781       static double epsilon() throw()
01782       { return __glibcpp_double_epsilon; }
01783       static double round_error() throw()
01784       { return __glibcpp_double_round_error; }
01785 
01786       static const int min_exponent = __glibcpp_double_min_exponent;
01787       static const int min_exponent10 = __glibcpp_double_min_exponent10;
01788       static const int max_exponent = __glibcpp_double_max_exponent;
01789       static const int max_exponent10 = __glibcpp_double_max_exponent10;
01790 
01791       static const bool has_infinity = __glibcpp_double_has_infinity;
01792       static const bool has_quiet_NaN = __glibcpp_double_has_quiet_NaN;
01793       static const bool has_signaling_NaN = __glibcpp_double_has_signaling_NaN;
01794       static const float_denorm_style has_denorm =
01795               __glibcpp_double_has_denorm;
01796       static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss;
01797 
01798       static double infinity() throw()
01799       { return __glibcpp_double_infinity; }
01800       static double quiet_NaN() throw()
01801       { return __glibcpp_double_quiet_NaN; }
01802       static double signaling_NaN() throw()
01803       { return __glibcpp_double_signaling_NaN; }
01804       static double denorm_min() throw()
01805       { return __glibcpp_double_denorm_min; }
01806 
01807       static const bool is_iec559 = __glibcpp_double_is_iec559;
01808       static const bool is_bounded = __glibcpp_double_is_bounded;
01809       static const bool is_modulo = __glibcpp_double_is_modulo;
01810 
01811       static const bool traps = __glibcpp_double_traps;
01812       static const bool tinyness_before = __glibcpp_double_tinyness_before;
01813       static const float_round_style round_style =
01814               __glibcpp_double_round_style;
01815     };
01816 
01817 #undef __glibcpp_double_min
01818 #undef __glibcpp_double_max
01819 #undef __glibcpp_double_digits
01820 #undef __glibcpp_double_digits10
01821 #undef __glibcpp_double_radix
01822 #undef __glibcpp_double_round_error
01823 #undef __glibcpp_double_min_exponent
01824 #undef __glibcpp_double_min_exponent10
01825 #undef __glibcpp_double_max_exponent
01826 #undef __glibcpp_double_max_exponent10
01827 #undef __glibcpp_double_has_infinity
01828 #undef __glibcpp_double_has_quiet_NaN
01829 #undef __glibcpp_double_has_signaling_NaN
01830 #undef __glibcpp_double_has_denorm
01831 #undef __glibcpp_double_has_denorm_loss
01832 #undef __glibcpp_double_infinity
01833 #undef __glibcpp_double_quiet_NaN
01834 #undef __glibcpp_double_signaling_NaN
01835 #undef __glibcpp_double_denorm_min
01836 #undef __glibcpp_double_is_iec559
01837 #undef __glibcpp_double_is_bounded
01838 #undef __glibcpp_double_is_modulo
01839 #undef __glibcpp_double_traps
01840 #undef __glibcpp_double_tinyness_before
01841 #undef __glibcpp_double_round_style  
01842   
01843   
01844   template<>
01845     struct numeric_limits<long double>
01846     {
01847       static const bool is_specialized = true;
01848 
01849       static long double min() throw()
01850       { return __glibcpp_long_double_min; }
01851       static long double max() throw()
01852       { return __glibcpp_long_double_max; }
01853 
01854       static const int digits = __glibcpp_long_double_digits;
01855       static const int digits10 = __glibcpp_long_double_digits10;
01856       static const bool is_signed = true;
01857       static const bool is_integer = false;
01858       static const bool is_exact = false;
01859       static const int radix = __glibcpp_long_double_radix;
01860       static long double epsilon() throw()
01861       { return __glibcpp_long_double_epsilon; }
01862       static long double round_error() throw()
01863       { return __glibcpp_long_double_round_error; }
01864 
01865       static const int min_exponent = __glibcpp_long_double_min_exponent;
01866       static const int min_exponent10 = __glibcpp_long_double_min_exponent10;
01867       static const int max_exponent = __glibcpp_long_double_max_exponent;
01868       static const int max_exponent10 = __glibcpp_long_double_max_exponent10;
01869 
01870       static const bool has_infinity = __glibcpp_long_double_has_infinity;
01871       static const bool has_quiet_NaN = __glibcpp_long_double_has_quiet_NaN;
01872       static const bool has_signaling_NaN =
01873                 __glibcpp_long_double_has_signaling_NaN;
01874       static const float_denorm_style has_denorm =
01875                 __glibcpp_long_double_has_denorm;
01876       static const bool has_denorm_loss =
01877                 __glibcpp_long_double_has_denorm_loss;
01878 
01879       static long double infinity() throw()
01880       { return __glibcpp_long_double_infinity; }
01881       static long double quiet_NaN() throw()
01882       { return __glibcpp_long_double_quiet_NaN; }
01883       static long double signaling_NaN() throw()
01884       { return __glibcpp_long_double_signaling_NaN; }
01885       static long double denorm_min() throw()
01886       { return __glibcpp_long_double_denorm_min; }
01887 
01888       static const bool is_iec559 = __glibcpp_long_double_is_iec559;
01889       static const bool is_bounded = __glibcpp_long_double_is_bounded;
01890       static const bool is_modulo = __glibcpp_long_double_is_modulo;
01891 
01892       static const bool traps = __glibcpp_long_double_traps; 
01893       static const bool tinyness_before = __glibcpp_long_double_tinyness_before;
01894       static const float_round_style round_style = 
01895         __glibcpp_long_double_round_style;
01896     };
01897 
01898 #undef __glibcpp_long_double_min
01899 #undef __glibcpp_long_double_max
01900 #undef __glibcpp_long_double_digits
01901 #undef __glibcpp_long_double_digits10
01902 #undef __glibcpp_long_double_radix
01903 #undef __glibcpp_long_double_round_error
01904 #undef __glibcpp_long_double_min_exponent
01905 #undef __glibcpp_long_double_min_exponent10
01906 #undef __glibcpp_long_double_max_exponent
01907 #undef __glibcpp_long_double_max_exponent10
01908 #undef __glibcpp_long_double_has_infinity
01909 #undef __glibcpp_long_double_has_quiet_NaN
01910 #undef __glibcpp_long_double_has_signaling_NaN
01911 #undef __glibcpp_long_double_has_denorm
01912 #undef __glibcpp_long_double_has_denorm_loss
01913 #undef __glibcpp_long_double_infinity
01914 #undef __glibcpp_long_double_quiet_NaN
01915 #undef __glibcpp_long_double_signaling_NaN
01916 #undef __glibcpp_long_double_denorm_min
01917 #undef __glibcpp_long_double_is_iec559
01918 #undef __glibcpp_long_double_is_bounded
01919 #undef __glibcpp_long_double_is_modulo
01920 #undef __glibcpp_long_double_traps
01921 #undef __glibcpp_long_double_tinyness_before
01922 #undef __glibcpp_long_double_round_style  
01923   
01924 } // namespace std
01925 
01926 #endif // _CPP_NUMERIC_LIMITS

Generated on Wed May 1 19:19:32 2002 for libstdc++-v3 Source by doxygen1.2.15