Whole document tree
    

Whole document tree

std_limits.h Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

std_limits.h

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

Generated on Mon Apr 8 03:11:34 2002 for libstdc++-v3 Source by doxygen1.2.15