Whole document tree std_limits.hGo 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 ![]() |