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_digits10 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_digits10 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 Sep 29 13:54:49 2004 for libstdc++-v3 Source by doxygen 1.3.7