libstdc++
|
00001 // The template and inlines for the numeric_limits classes. -*- C++ -*- 00002 00003 // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 00004 // 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. 00005 // 00006 // This file is part of the GNU ISO C++ Library. This library is free 00007 // software; you can redistribute it and/or modify it under the 00008 // terms of the GNU General Public License as published by the 00009 // Free Software Foundation; either version 3, or (at your option) 00010 // any later version. 00011 00012 // This library is distributed in the hope that it will be useful, 00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 // GNU General Public License for more details. 00016 00017 // Under Section 7 of GPL version 3, you are granted additional 00018 // permissions described in the GCC Runtime Library Exception, version 00019 // 3.1, as published by the Free Software Foundation. 00020 00021 // You should have received a copy of the GNU General Public License and 00022 // a copy of the GCC Runtime Library Exception along with this program; 00023 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 00024 // <http://www.gnu.org/licenses/>. 00025 00026 /** @file include/limits 00027 * This is a Standard C++ Library header. 00028 */ 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 _GLIBCXX_NUMERIC_LIMITS 00039 #define _GLIBCXX_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 14 such types: 00049 // * integers 00050 // bool (1) 00051 // char, signed char, unsigned char, wchar_t (4) 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++ understands (where supported by the host C-library) 00062 // * integer 00063 // long long, unsigned long long (2) 00064 // 00065 // which brings us to 16 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 // GCC only intrinsically supports modulo integral types. The only remaining 00078 // integral exceptional values is division by zero. Only targets that do not 00079 // signal division by zero in some "hard to ignore" way should use false. 00080 #ifndef __glibcxx_integral_traps 00081 # define __glibcxx_integral_traps true 00082 #endif 00083 00084 // float 00085 // 00086 00087 // Default values. Should be overridden in configuration files if necessary. 00088 00089 #ifndef __glibcxx_float_has_denorm_loss 00090 # define __glibcxx_float_has_denorm_loss false 00091 #endif 00092 #ifndef __glibcxx_float_traps 00093 # define __glibcxx_float_traps false 00094 #endif 00095 #ifndef __glibcxx_float_tinyness_before 00096 # define __glibcxx_float_tinyness_before false 00097 #endif 00098 00099 // double 00100 00101 // Default values. Should be overridden in configuration files if necessary. 00102 00103 #ifndef __glibcxx_double_has_denorm_loss 00104 # define __glibcxx_double_has_denorm_loss false 00105 #endif 00106 #ifndef __glibcxx_double_traps 00107 # define __glibcxx_double_traps false 00108 #endif 00109 #ifndef __glibcxx_double_tinyness_before 00110 # define __glibcxx_double_tinyness_before false 00111 #endif 00112 00113 // long double 00114 00115 // Default values. Should be overridden in configuration files if necessary. 00116 00117 #ifndef __glibcxx_long_double_has_denorm_loss 00118 # define __glibcxx_long_double_has_denorm_loss false 00119 #endif 00120 #ifndef __glibcxx_long_double_traps 00121 # define __glibcxx_long_double_traps false 00122 #endif 00123 #ifndef __glibcxx_long_double_tinyness_before 00124 # define __glibcxx_long_double_tinyness_before false 00125 #endif 00126 00127 // You should not need to define any macros below this point. 00128 00129 #define __glibcxx_signed(T) ((T)(-1) < 0) 00130 00131 #define __glibcxx_min(T) \ 00132 (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0) 00133 00134 #define __glibcxx_max(T) \ 00135 (__glibcxx_signed (T) ? \ 00136 (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0) 00137 00138 #define __glibcxx_digits(T) \ 00139 (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T)) 00140 00141 // The fraction 643/2136 approximates log10(2) to 7 significant digits. 00142 #define __glibcxx_digits10(T) \ 00143 (__glibcxx_digits (T) * 643L / 2136) 00144 00145 #define __glibcxx_max_digits10(T) \ 00146 (2 + (T) * 643L / 2136) 00147 00148 namespace std _GLIBCXX_VISIBILITY(default) 00149 { 00150 _GLIBCXX_BEGIN_NAMESPACE_VERSION 00151 00152 /** 00153 * @brief Describes the rounding style for floating-point types. 00154 * 00155 * This is used in the std::numeric_limits class. 00156 */ 00157 enum float_round_style 00158 { 00159 round_indeterminate = -1, /// Intermediate. 00160 round_toward_zero = 0, /// To zero. 00161 round_to_nearest = 1, /// To the nearest representable value. 00162 round_toward_infinity = 2, /// To infinity. 00163 round_toward_neg_infinity = 3 /// To negative infinity. 00164 }; 00165 00166 /** 00167 * @brief Describes the denormalization for floating-point types. 00168 * 00169 * These values represent the presence or absence of a variable number 00170 * of exponent bits. This type is used in the std::numeric_limits class. 00171 */ 00172 enum float_denorm_style 00173 { 00174 /// Indeterminate at compile time whether denormalized values are allowed. 00175 denorm_indeterminate = -1, 00176 /// The type does not allow denormalized values. 00177 denorm_absent = 0, 00178 /// The type allows denormalized values. 00179 denorm_present = 1 00180 }; 00181 00182 /** 00183 * @brief Part of std::numeric_limits. 00184 * 00185 * The @c static @c const members are usable as integral constant 00186 * expressions. 00187 * 00188 * @note This is a separate class for purposes of efficiency; you 00189 * should only access these members as part of an instantiation 00190 * of the std::numeric_limits class. 00191 */ 00192 struct __numeric_limits_base 00193 { 00194 /** This will be true for all fundamental types (which have 00195 specializations), and false for everything else. */ 00196 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false; 00197 00198 /** The number of @c radix digits that be represented without change: for 00199 integer types, the number of non-sign bits in the mantissa; for 00200 floating types, the number of @c radix digits in the mantissa. */ 00201 static _GLIBCXX_USE_CONSTEXPR int digits = 0; 00202 00203 /** The number of base 10 digits that can be represented without change. */ 00204 static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 00205 00206 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00207 /** The number of base 10 digits required to ensure that values which 00208 differ are always differentiated. */ 00209 static constexpr int max_digits10 = 0; 00210 #endif 00211 00212 /** True if the type is signed. */ 00213 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00214 00215 /** True if the type is integer. 00216 * Is this supposed to be <em>if the type is integral?</em> */ 00217 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 00218 00219 /** True if the type uses an exact representation. <em>All integer types are 00220 exact, but not all exact types are integer. For example, rational and 00221 fixed-exponent representations are exact but not integer.</em> 00222 [18.2.1.2]/15 */ 00223 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 00224 00225 /** For integer types, specifies the base of the representation. For 00226 floating types, specifies the base of the exponent representation. */ 00227 static _GLIBCXX_USE_CONSTEXPR int radix = 0; 00228 00229 /** The minimum negative integer such that @c radix raised to the power of 00230 (one less than that integer) is a normalized floating point number. */ 00231 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00232 00233 /** The minimum negative integer such that 10 raised to that power is in 00234 the range of normalized floating point numbers. */ 00235 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00236 00237 /** The maximum positive integer such that @c radix raised to the power of 00238 (one less than that integer) is a representable finite floating point 00239 number. */ 00240 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00241 00242 /** The maximum positive integer such that 10 raised to that power is in 00243 the range of representable finite floating point numbers. */ 00244 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00245 00246 /** True if the type has a representation for positive infinity. */ 00247 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00248 00249 /** True if the type has a representation for a quiet (non-signaling) 00250 <em>Not a Number</em>. */ 00251 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00252 00253 /** True if the type has a representation for a signaling 00254 <em>Not a Number</em>. */ 00255 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00256 00257 /** See std::float_denorm_style for more information. */ 00258 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent; 00259 00260 /** <em>True if loss of accuracy is detected as a denormalization loss, 00261 rather than as an inexact result.</em> [18.2.1.2]/42 */ 00262 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00263 00264 /** True if-and-only-if the type adheres to the IEC 559 standard, also 00265 known as IEEE 754. (Only makes sense for floating point types.) */ 00266 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00267 00268 /** <em>True if the set of values representable by the type is 00269 finite. All built-in types are bounded, this member would be 00270 false for arbitrary precision types.</em> [18.2.1.2]/54 */ 00271 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false; 00272 00273 /** True if the type is @e modulo, that is, if it is possible to add two 00274 positive numbers and have a result that wraps around to a third number 00275 that is less. Typically false for floating types, true for unsigned 00276 integers, and true for signed integers. */ 00277 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00278 00279 /** True if trapping is implemented for this type. */ 00280 static _GLIBCXX_USE_CONSTEXPR bool traps = false; 00281 00282 /** True if tininess is detected before rounding. (see IEC 559) */ 00283 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00284 00285 /** See std::float_round_style for more information. This is only 00286 meaningful for floating types; integer types will all be 00287 round_toward_zero. */ 00288 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 00289 round_toward_zero; 00290 }; 00291 00292 /** 00293 * @brief Properties of fundamental types. 00294 * 00295 * This class allows a program to obtain information about the 00296 * representation of a fundamental type on a given platform. For 00297 * non-fundamental types, the functions will return 0 and the data 00298 * members will all be @c false. 00299 * 00300 * _GLIBCXX_RESOLVE_LIB_DEFECTS: DRs 201 and 184 (hi Gaby!) are 00301 * noted, but not incorporated in this documented (yet). 00302 */ 00303 template<typename _Tp> 00304 struct numeric_limits : public __numeric_limits_base 00305 { 00306 /** The minimum finite value, or for floating types with 00307 denormalization, the minimum positive normalized value. */ 00308 static _GLIBCXX_CONSTEXPR _Tp 00309 min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00310 00311 /** The maximum finite value. */ 00312 static _GLIBCXX_CONSTEXPR _Tp 00313 max() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00314 00315 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00316 /** A finite value x such that there is no other finite value y 00317 * where y < x. */ 00318 static constexpr _Tp 00319 lowest() noexcept { return static_cast<_Tp>(0); } 00320 #endif 00321 00322 /** The @e machine @e epsilon: the difference between 1 and the least 00323 value greater than 1 that is representable. */ 00324 static _GLIBCXX_CONSTEXPR _Tp 00325 epsilon() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00326 00327 /** The maximum rounding error measurement (see LIA-1). */ 00328 static _GLIBCXX_CONSTEXPR _Tp 00329 round_error() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00330 00331 /** The representation of positive infinity, if @c has_infinity. */ 00332 static _GLIBCXX_CONSTEXPR _Tp 00333 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00334 00335 /** The representation of a quiet <em>Not a Number</em>, 00336 if @c has_quiet_NaN. */ 00337 static _GLIBCXX_CONSTEXPR _Tp 00338 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00339 00340 /** The representation of a signaling <em>Not a Number</em>, if 00341 @c has_signaling_NaN. */ 00342 static _GLIBCXX_CONSTEXPR _Tp 00343 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00344 00345 /** The minimum positive denormalized value. For types where 00346 @c has_denorm is false, this is the minimum positive normalized 00347 value. */ 00348 static _GLIBCXX_CONSTEXPR _Tp 00349 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } 00350 }; 00351 00352 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00353 template<typename _Tp> 00354 struct numeric_limits<const _Tp> 00355 : public numeric_limits<_Tp> { }; 00356 00357 template<typename _Tp> 00358 struct numeric_limits<volatile _Tp> 00359 : public numeric_limits<_Tp> { }; 00360 00361 template<typename _Tp> 00362 struct numeric_limits<const volatile _Tp> 00363 : public numeric_limits<_Tp> { }; 00364 #endif 00365 00366 // Now there follow 16 explicit specializations. Yes, 16. Make sure 00367 // you get the count right. (18 in c++0x mode) 00368 00369 /// numeric_limits<bool> specialization. 00370 template<> 00371 struct numeric_limits<bool> 00372 { 00373 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00374 00375 static _GLIBCXX_CONSTEXPR bool 00376 min() _GLIBCXX_USE_NOEXCEPT { return false; } 00377 00378 static _GLIBCXX_CONSTEXPR bool 00379 max() _GLIBCXX_USE_NOEXCEPT { return true; } 00380 00381 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00382 static constexpr bool 00383 lowest() noexcept { return min(); } 00384 #endif 00385 static _GLIBCXX_USE_CONSTEXPR int digits = 1; 00386 static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 00387 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00388 static constexpr int max_digits10 = 0; 00389 #endif 00390 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00391 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00392 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00393 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00394 00395 static _GLIBCXX_CONSTEXPR bool 00396 epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } 00397 00398 static _GLIBCXX_CONSTEXPR bool 00399 round_error() _GLIBCXX_USE_NOEXCEPT { return false; } 00400 00401 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00402 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00403 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00404 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00405 00406 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00407 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00408 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00409 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00410 = denorm_absent; 00411 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00412 00413 static _GLIBCXX_CONSTEXPR bool 00414 infinity() _GLIBCXX_USE_NOEXCEPT { return false; } 00415 00416 static _GLIBCXX_CONSTEXPR bool 00417 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 00418 00419 static _GLIBCXX_CONSTEXPR bool 00420 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 00421 00422 static _GLIBCXX_CONSTEXPR bool 00423 denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; } 00424 00425 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00426 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00427 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00428 00429 // It is not clear what it means for a boolean type to trap. 00430 // This is a DR on the LWG issue list. Here, I use integer 00431 // promotion semantics. 00432 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00433 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00434 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00435 = round_toward_zero; 00436 }; 00437 00438 /// numeric_limits<char> specialization. 00439 template<> 00440 struct numeric_limits<char> 00441 { 00442 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00443 00444 static _GLIBCXX_CONSTEXPR char 00445 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); } 00446 00447 static _GLIBCXX_CONSTEXPR char 00448 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); } 00449 00450 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00451 static constexpr char 00452 lowest() noexcept { return min(); } 00453 #endif 00454 00455 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); 00456 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); 00457 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00458 static constexpr int max_digits10 = 0; 00459 #endif 00460 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); 00461 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00462 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00463 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00464 00465 static _GLIBCXX_CONSTEXPR char 00466 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00467 00468 static _GLIBCXX_CONSTEXPR char 00469 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00470 00471 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00472 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00473 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00474 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00475 00476 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00477 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00478 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00479 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00480 = denorm_absent; 00481 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00482 00483 static _GLIBCXX_CONSTEXPR 00484 char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); } 00485 00486 static _GLIBCXX_CONSTEXPR char 00487 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 00488 00489 static _GLIBCXX_CONSTEXPR char 00490 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 00491 00492 static _GLIBCXX_CONSTEXPR char 00493 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); } 00494 00495 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00496 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00497 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00498 00499 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00500 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00501 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00502 = round_toward_zero; 00503 }; 00504 00505 /// numeric_limits<signed char> specialization. 00506 template<> 00507 struct numeric_limits<signed char> 00508 { 00509 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00510 00511 static _GLIBCXX_CONSTEXPR signed char 00512 min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; } 00513 00514 static _GLIBCXX_CONSTEXPR signed char 00515 max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; } 00516 00517 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00518 static constexpr signed char 00519 lowest() noexcept { return min(); } 00520 #endif 00521 00522 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); 00523 static _GLIBCXX_USE_CONSTEXPR int digits10 00524 = __glibcxx_digits10 (signed char); 00525 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00526 static constexpr int max_digits10 = 0; 00527 #endif 00528 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 00529 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00530 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00531 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00532 00533 static _GLIBCXX_CONSTEXPR signed char 00534 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00535 00536 static _GLIBCXX_CONSTEXPR signed char 00537 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00538 00539 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00540 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00541 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00542 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00543 00544 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00545 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00546 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00547 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00548 = denorm_absent; 00549 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00550 00551 static _GLIBCXX_CONSTEXPR signed char 00552 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 00553 00554 static _GLIBCXX_CONSTEXPR signed char 00555 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 00556 00557 static _GLIBCXX_CONSTEXPR signed char 00558 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00559 { return static_cast<signed char>(0); } 00560 00561 static _GLIBCXX_CONSTEXPR signed char 00562 denorm_min() _GLIBCXX_USE_NOEXCEPT 00563 { return static_cast<signed char>(0); } 00564 00565 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00566 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00567 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00568 00569 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00570 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00571 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00572 = round_toward_zero; 00573 }; 00574 00575 /// numeric_limits<unsigned char> specialization. 00576 template<> 00577 struct numeric_limits<unsigned char> 00578 { 00579 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00580 00581 static _GLIBCXX_CONSTEXPR unsigned char 00582 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 00583 00584 static _GLIBCXX_CONSTEXPR unsigned char 00585 max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; } 00586 00587 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00588 static constexpr unsigned char 00589 lowest() noexcept { return min(); } 00590 #endif 00591 00592 static _GLIBCXX_USE_CONSTEXPR int digits 00593 = __glibcxx_digits (unsigned char); 00594 static _GLIBCXX_USE_CONSTEXPR int digits10 00595 = __glibcxx_digits10 (unsigned char); 00596 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00597 static constexpr int max_digits10 = 0; 00598 #endif 00599 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00600 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00601 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00602 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00603 00604 static _GLIBCXX_CONSTEXPR unsigned char 00605 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00606 00607 static _GLIBCXX_CONSTEXPR unsigned char 00608 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00609 00610 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00611 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00612 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00613 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00614 00615 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00616 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00617 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00618 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00619 = denorm_absent; 00620 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00621 00622 static _GLIBCXX_CONSTEXPR unsigned char 00623 infinity() _GLIBCXX_USE_NOEXCEPT 00624 { return static_cast<unsigned char>(0); } 00625 00626 static _GLIBCXX_CONSTEXPR unsigned char 00627 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 00628 { return static_cast<unsigned char>(0); } 00629 00630 static _GLIBCXX_CONSTEXPR unsigned char 00631 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00632 { return static_cast<unsigned char>(0); } 00633 00634 static _GLIBCXX_CONSTEXPR unsigned char 00635 denorm_min() _GLIBCXX_USE_NOEXCEPT 00636 { return static_cast<unsigned char>(0); } 00637 00638 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00639 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00640 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00641 00642 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00643 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00644 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00645 = round_toward_zero; 00646 }; 00647 00648 /// numeric_limits<wchar_t> specialization. 00649 template<> 00650 struct numeric_limits<wchar_t> 00651 { 00652 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00653 00654 static _GLIBCXX_CONSTEXPR wchar_t 00655 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); } 00656 00657 static _GLIBCXX_CONSTEXPR wchar_t 00658 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); } 00659 00660 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00661 static constexpr wchar_t 00662 lowest() noexcept { return min(); } 00663 #endif 00664 00665 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); 00666 static _GLIBCXX_USE_CONSTEXPR int digits10 00667 = __glibcxx_digits10 (wchar_t); 00668 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00669 static constexpr int max_digits10 = 0; 00670 #endif 00671 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); 00672 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00673 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00674 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00675 00676 static _GLIBCXX_CONSTEXPR wchar_t 00677 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00678 00679 static _GLIBCXX_CONSTEXPR wchar_t 00680 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00681 00682 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00683 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00684 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00685 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00686 00687 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00688 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00689 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00690 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00691 = denorm_absent; 00692 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00693 00694 static _GLIBCXX_CONSTEXPR wchar_t 00695 infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00696 00697 static _GLIBCXX_CONSTEXPR wchar_t 00698 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00699 00700 static _GLIBCXX_CONSTEXPR wchar_t 00701 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00702 00703 static _GLIBCXX_CONSTEXPR wchar_t 00704 denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00705 00706 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00707 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00708 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00709 00710 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00711 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00712 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00713 = round_toward_zero; 00714 }; 00715 00716 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00717 /// numeric_limits<char16_t> specialization. 00718 template<> 00719 struct numeric_limits<char16_t> 00720 { 00721 static constexpr bool is_specialized = true; 00722 00723 static constexpr char16_t 00724 min() noexcept { return __glibcxx_min (char16_t); } 00725 00726 static constexpr char16_t 00727 max() noexcept { return __glibcxx_max (char16_t); } 00728 00729 static constexpr char16_t 00730 lowest() noexcept { return min(); } 00731 00732 static constexpr int digits = __glibcxx_digits (char16_t); 00733 static constexpr int digits10 = __glibcxx_digits10 (char16_t); 00734 static constexpr int max_digits10 = 0; 00735 static constexpr bool is_signed = __glibcxx_signed (char16_t); 00736 static constexpr bool is_integer = true; 00737 static constexpr bool is_exact = true; 00738 static constexpr int radix = 2; 00739 00740 static constexpr char16_t 00741 epsilon() noexcept { return 0; } 00742 00743 static constexpr char16_t 00744 round_error() noexcept { return 0; } 00745 00746 static constexpr int min_exponent = 0; 00747 static constexpr int min_exponent10 = 0; 00748 static constexpr int max_exponent = 0; 00749 static constexpr int max_exponent10 = 0; 00750 00751 static constexpr bool has_infinity = false; 00752 static constexpr bool has_quiet_NaN = false; 00753 static constexpr bool has_signaling_NaN = false; 00754 static constexpr float_denorm_style has_denorm = denorm_absent; 00755 static constexpr bool has_denorm_loss = false; 00756 00757 static constexpr char16_t 00758 infinity() noexcept { return char16_t(); } 00759 00760 static constexpr char16_t 00761 quiet_NaN() noexcept { return char16_t(); } 00762 00763 static constexpr char16_t 00764 signaling_NaN() noexcept { return char16_t(); } 00765 00766 static constexpr char16_t 00767 denorm_min() noexcept { return char16_t(); } 00768 00769 static constexpr bool is_iec559 = false; 00770 static constexpr bool is_bounded = true; 00771 static constexpr bool is_modulo = true; 00772 00773 static constexpr bool traps = __glibcxx_integral_traps; 00774 static constexpr bool tinyness_before = false; 00775 static constexpr float_round_style round_style = round_toward_zero; 00776 }; 00777 00778 /// numeric_limits<char32_t> specialization. 00779 template<> 00780 struct numeric_limits<char32_t> 00781 { 00782 static constexpr bool is_specialized = true; 00783 00784 static constexpr char32_t 00785 min() noexcept { return __glibcxx_min (char32_t); } 00786 00787 static constexpr char32_t 00788 max() noexcept { return __glibcxx_max (char32_t); } 00789 00790 static constexpr char32_t 00791 lowest() noexcept { return min(); } 00792 00793 static constexpr int digits = __glibcxx_digits (char32_t); 00794 static constexpr int digits10 = __glibcxx_digits10 (char32_t); 00795 static constexpr int max_digits10 = 0; 00796 static constexpr bool is_signed = __glibcxx_signed (char32_t); 00797 static constexpr bool is_integer = true; 00798 static constexpr bool is_exact = true; 00799 static constexpr int radix = 2; 00800 00801 static constexpr char32_t 00802 epsilon() noexcept { return 0; } 00803 00804 static constexpr char32_t 00805 round_error() noexcept { return 0; } 00806 00807 static constexpr int min_exponent = 0; 00808 static constexpr int min_exponent10 = 0; 00809 static constexpr int max_exponent = 0; 00810 static constexpr int max_exponent10 = 0; 00811 00812 static constexpr bool has_infinity = false; 00813 static constexpr bool has_quiet_NaN = false; 00814 static constexpr bool has_signaling_NaN = false; 00815 static constexpr float_denorm_style has_denorm = denorm_absent; 00816 static constexpr bool has_denorm_loss = false; 00817 00818 static constexpr char32_t 00819 infinity() noexcept { return char32_t(); } 00820 00821 static constexpr char32_t 00822 quiet_NaN() noexcept { return char32_t(); } 00823 00824 static constexpr char32_t 00825 signaling_NaN() noexcept { return char32_t(); } 00826 00827 static constexpr char32_t 00828 denorm_min() noexcept { return char32_t(); } 00829 00830 static constexpr bool is_iec559 = false; 00831 static constexpr bool is_bounded = true; 00832 static constexpr bool is_modulo = true; 00833 00834 static constexpr bool traps = __glibcxx_integral_traps; 00835 static constexpr bool tinyness_before = false; 00836 static constexpr float_round_style round_style = round_toward_zero; 00837 }; 00838 #endif 00839 00840 /// numeric_limits<short> specialization. 00841 template<> 00842 struct numeric_limits<short> 00843 { 00844 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00845 00846 static _GLIBCXX_CONSTEXPR short 00847 min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; } 00848 00849 static _GLIBCXX_CONSTEXPR short 00850 max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; } 00851 00852 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00853 static constexpr short 00854 lowest() noexcept { return min(); } 00855 #endif 00856 00857 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); 00858 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); 00859 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00860 static constexpr int max_digits10 = 0; 00861 #endif 00862 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 00863 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00864 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00865 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00866 00867 static _GLIBCXX_CONSTEXPR short 00868 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00869 00870 static _GLIBCXX_CONSTEXPR short 00871 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00872 00873 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00874 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00875 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00876 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00877 00878 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00879 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00880 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00881 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00882 = denorm_absent; 00883 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00884 00885 static _GLIBCXX_CONSTEXPR short 00886 infinity() _GLIBCXX_USE_NOEXCEPT { return short(); } 00887 00888 static _GLIBCXX_CONSTEXPR short 00889 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 00890 00891 static _GLIBCXX_CONSTEXPR short 00892 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 00893 00894 static _GLIBCXX_CONSTEXPR short 00895 denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); } 00896 00897 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00898 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00899 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00900 00901 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00902 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00903 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00904 = round_toward_zero; 00905 }; 00906 00907 /// numeric_limits<unsigned short> specialization. 00908 template<> 00909 struct numeric_limits<unsigned short> 00910 { 00911 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00912 00913 static _GLIBCXX_CONSTEXPR unsigned short 00914 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 00915 00916 static _GLIBCXX_CONSTEXPR unsigned short 00917 max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; } 00918 00919 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00920 static constexpr unsigned short 00921 lowest() noexcept { return min(); } 00922 #endif 00923 00924 static _GLIBCXX_USE_CONSTEXPR int digits 00925 = __glibcxx_digits (unsigned short); 00926 static _GLIBCXX_USE_CONSTEXPR int digits10 00927 = __glibcxx_digits10 (unsigned short); 00928 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00929 static constexpr int max_digits10 = 0; 00930 #endif 00931 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00932 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00933 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00934 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00935 00936 static _GLIBCXX_CONSTEXPR unsigned short 00937 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00938 00939 static _GLIBCXX_CONSTEXPR unsigned short 00940 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00941 00942 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00943 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00944 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00945 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00946 00947 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00948 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00949 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00950 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00951 = denorm_absent; 00952 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00953 00954 static _GLIBCXX_CONSTEXPR unsigned short 00955 infinity() _GLIBCXX_USE_NOEXCEPT 00956 { return static_cast<unsigned short>(0); } 00957 00958 static _GLIBCXX_CONSTEXPR unsigned short 00959 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 00960 { return static_cast<unsigned short>(0); } 00961 00962 static _GLIBCXX_CONSTEXPR unsigned short 00963 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00964 { return static_cast<unsigned short>(0); } 00965 00966 static _GLIBCXX_CONSTEXPR unsigned short 00967 denorm_min() _GLIBCXX_USE_NOEXCEPT 00968 { return static_cast<unsigned short>(0); } 00969 00970 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00971 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00972 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00973 00974 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00975 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00976 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00977 = round_toward_zero; 00978 }; 00979 00980 /// numeric_limits<int> specialization. 00981 template<> 00982 struct numeric_limits<int> 00983 { 00984 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00985 00986 static _GLIBCXX_CONSTEXPR int 00987 min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; } 00988 00989 static _GLIBCXX_CONSTEXPR int 00990 max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; } 00991 00992 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00993 static constexpr int 00994 lowest() noexcept { return min(); } 00995 #endif 00996 00997 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); 00998 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); 00999 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01000 static constexpr int max_digits10 = 0; 01001 #endif 01002 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01003 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01004 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01005 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01006 01007 static _GLIBCXX_CONSTEXPR int 01008 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01009 01010 static _GLIBCXX_CONSTEXPR int 01011 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01012 01013 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01014 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01015 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01016 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01017 01018 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01019 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01020 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01021 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01022 = denorm_absent; 01023 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01024 01025 static _GLIBCXX_CONSTEXPR int 01026 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01027 01028 static _GLIBCXX_CONSTEXPR int 01029 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01030 01031 static _GLIBCXX_CONSTEXPR int 01032 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01033 01034 static _GLIBCXX_CONSTEXPR int 01035 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01036 01037 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01038 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01039 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01040 01041 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01042 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01043 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01044 = round_toward_zero; 01045 }; 01046 01047 /// numeric_limits<unsigned int> specialization. 01048 template<> 01049 struct numeric_limits<unsigned int> 01050 { 01051 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01052 01053 static _GLIBCXX_CONSTEXPR unsigned int 01054 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01055 01056 static _GLIBCXX_CONSTEXPR unsigned int 01057 max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; } 01058 01059 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01060 static constexpr unsigned int 01061 lowest() noexcept { return min(); } 01062 #endif 01063 01064 static _GLIBCXX_USE_CONSTEXPR int digits 01065 = __glibcxx_digits (unsigned int); 01066 static _GLIBCXX_USE_CONSTEXPR int digits10 01067 = __glibcxx_digits10 (unsigned int); 01068 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01069 static constexpr int max_digits10 = 0; 01070 #endif 01071 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01072 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01073 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01074 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01075 01076 static _GLIBCXX_CONSTEXPR unsigned int 01077 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01078 01079 static _GLIBCXX_CONSTEXPR unsigned int 01080 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01081 01082 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01083 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01084 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01085 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01086 01087 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01088 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01089 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01090 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01091 = denorm_absent; 01092 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01093 01094 static _GLIBCXX_CONSTEXPR unsigned int 01095 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); } 01096 01097 static _GLIBCXX_CONSTEXPR unsigned int 01098 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01099 { return static_cast<unsigned int>(0); } 01100 01101 static _GLIBCXX_CONSTEXPR unsigned int 01102 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01103 { return static_cast<unsigned int>(0); } 01104 01105 static _GLIBCXX_CONSTEXPR unsigned int 01106 denorm_min() _GLIBCXX_USE_NOEXCEPT 01107 { return static_cast<unsigned int>(0); } 01108 01109 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01110 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01111 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01112 01113 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01114 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01115 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01116 = round_toward_zero; 01117 }; 01118 01119 /// numeric_limits<long> specialization. 01120 template<> 01121 struct numeric_limits<long> 01122 { 01123 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01124 01125 static _GLIBCXX_CONSTEXPR long 01126 min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; } 01127 01128 static _GLIBCXX_CONSTEXPR long 01129 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; } 01130 01131 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01132 static constexpr long 01133 lowest() noexcept { return min(); } 01134 #endif 01135 01136 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); 01137 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); 01138 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01139 static constexpr int max_digits10 = 0; 01140 #endif 01141 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01142 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01143 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01144 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01145 01146 static _GLIBCXX_CONSTEXPR long 01147 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01148 01149 static _GLIBCXX_CONSTEXPR long 01150 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01151 01152 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01153 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01154 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01155 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01156 01157 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01158 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01159 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01160 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01161 = denorm_absent; 01162 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01163 01164 static _GLIBCXX_CONSTEXPR long 01165 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01166 01167 static _GLIBCXX_CONSTEXPR long 01168 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01169 01170 static _GLIBCXX_CONSTEXPR long 01171 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01172 01173 static _GLIBCXX_CONSTEXPR long 01174 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01175 01176 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01177 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01178 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01179 01180 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01181 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01182 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01183 = round_toward_zero; 01184 }; 01185 01186 /// numeric_limits<unsigned long> specialization. 01187 template<> 01188 struct numeric_limits<unsigned long> 01189 { 01190 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01191 01192 static _GLIBCXX_CONSTEXPR unsigned long 01193 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01194 01195 static _GLIBCXX_CONSTEXPR unsigned long 01196 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; } 01197 01198 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01199 static constexpr unsigned long 01200 lowest() noexcept { return min(); } 01201 #endif 01202 01203 static _GLIBCXX_USE_CONSTEXPR int digits 01204 = __glibcxx_digits (unsigned long); 01205 static _GLIBCXX_USE_CONSTEXPR int digits10 01206 = __glibcxx_digits10 (unsigned long); 01207 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01208 static constexpr int max_digits10 = 0; 01209 #endif 01210 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01211 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01212 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01213 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01214 01215 static _GLIBCXX_CONSTEXPR unsigned long 01216 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01217 01218 static _GLIBCXX_CONSTEXPR unsigned long 01219 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01220 01221 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01222 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01223 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01224 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01225 01226 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01227 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01228 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01229 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01230 = denorm_absent; 01231 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01232 01233 static _GLIBCXX_CONSTEXPR unsigned long 01234 infinity() _GLIBCXX_USE_NOEXCEPT 01235 { return static_cast<unsigned long>(0); } 01236 01237 static _GLIBCXX_CONSTEXPR unsigned long 01238 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01239 { return static_cast<unsigned long>(0); } 01240 01241 static _GLIBCXX_CONSTEXPR unsigned long 01242 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01243 { return static_cast<unsigned long>(0); } 01244 01245 static _GLIBCXX_CONSTEXPR unsigned long 01246 denorm_min() _GLIBCXX_USE_NOEXCEPT 01247 { return static_cast<unsigned long>(0); } 01248 01249 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01250 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01251 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01252 01253 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01254 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01255 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01256 = round_toward_zero; 01257 }; 01258 01259 /// numeric_limits<long long> specialization. 01260 template<> 01261 struct numeric_limits<long long> 01262 { 01263 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01264 01265 static _GLIBCXX_CONSTEXPR long long 01266 min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; } 01267 01268 static _GLIBCXX_CONSTEXPR long long 01269 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; } 01270 01271 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01272 static constexpr long long 01273 lowest() noexcept { return min(); } 01274 #endif 01275 01276 static _GLIBCXX_USE_CONSTEXPR int digits 01277 = __glibcxx_digits (long long); 01278 static _GLIBCXX_USE_CONSTEXPR int digits10 01279 = __glibcxx_digits10 (long long); 01280 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01281 static constexpr int max_digits10 = 0; 01282 #endif 01283 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01284 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01285 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01286 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01287 01288 static _GLIBCXX_CONSTEXPR long long 01289 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01290 01291 static _GLIBCXX_CONSTEXPR long long 01292 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01293 01294 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01295 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01296 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01297 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01298 01299 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01300 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01301 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01302 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01303 = denorm_absent; 01304 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01305 01306 static _GLIBCXX_CONSTEXPR long long 01307 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01308 01309 static _GLIBCXX_CONSTEXPR long long 01310 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01311 01312 static _GLIBCXX_CONSTEXPR long long 01313 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01314 { return static_cast<long long>(0); } 01315 01316 static _GLIBCXX_CONSTEXPR long long 01317 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01318 01319 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01320 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01321 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01322 01323 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01324 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01325 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01326 = round_toward_zero; 01327 }; 01328 01329 /// numeric_limits<unsigned long long> specialization. 01330 template<> 01331 struct numeric_limits<unsigned long long> 01332 { 01333 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01334 01335 static _GLIBCXX_CONSTEXPR unsigned long long 01336 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01337 01338 static _GLIBCXX_CONSTEXPR unsigned long long 01339 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; } 01340 01341 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01342 static constexpr unsigned long long 01343 lowest() noexcept { return min(); } 01344 #endif 01345 01346 static _GLIBCXX_USE_CONSTEXPR int digits 01347 = __glibcxx_digits (unsigned long long); 01348 static _GLIBCXX_USE_CONSTEXPR int digits10 01349 = __glibcxx_digits10 (unsigned long long); 01350 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01351 static constexpr int max_digits10 = 0; 01352 #endif 01353 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01354 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01355 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01356 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01357 01358 static _GLIBCXX_CONSTEXPR unsigned long long 01359 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01360 01361 static _GLIBCXX_CONSTEXPR unsigned long long 01362 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01363 01364 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01365 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01366 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01367 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01368 01369 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01370 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01371 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01372 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01373 = denorm_absent; 01374 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01375 01376 static _GLIBCXX_CONSTEXPR unsigned long long 01377 infinity() _GLIBCXX_USE_NOEXCEPT 01378 { return static_cast<unsigned long long>(0); } 01379 01380 static _GLIBCXX_CONSTEXPR unsigned long long 01381 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01382 { return static_cast<unsigned long long>(0); } 01383 01384 static _GLIBCXX_CONSTEXPR unsigned long long 01385 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01386 { return static_cast<unsigned long long>(0); } 01387 01388 static _GLIBCXX_CONSTEXPR unsigned long long 01389 denorm_min() _GLIBCXX_USE_NOEXCEPT 01390 { return static_cast<unsigned long long>(0); } 01391 01392 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01393 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01394 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01395 01396 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01397 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01398 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01399 = round_toward_zero; 01400 }; 01401 01402 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) 01403 /// numeric_limits<__int128> specialization. 01404 template<> 01405 struct numeric_limits<__int128> 01406 { 01407 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01408 01409 static _GLIBCXX_CONSTEXPR __int128 01410 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); } 01411 01412 static _GLIBCXX_CONSTEXPR __int128 01413 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); } 01414 01415 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01416 static constexpr __int128 01417 lowest() noexcept { return min(); } 01418 #endif 01419 01420 static _GLIBCXX_USE_CONSTEXPR int digits 01421 = __glibcxx_digits (__int128); 01422 static _GLIBCXX_USE_CONSTEXPR int digits10 01423 = __glibcxx_digits10 (__int128); 01424 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01425 static constexpr int max_digits10 = 0; 01426 #endif 01427 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01428 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01429 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01430 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01431 01432 static _GLIBCXX_CONSTEXPR __int128 01433 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01434 01435 static _GLIBCXX_CONSTEXPR __int128 01436 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01437 01438 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01439 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01440 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01441 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01442 01443 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01444 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01445 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01446 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01447 = denorm_absent; 01448 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01449 01450 static _GLIBCXX_CONSTEXPR __int128 01451 infinity() _GLIBCXX_USE_NOEXCEPT 01452 { return static_cast<__int128>(0); } 01453 01454 static _GLIBCXX_CONSTEXPR __int128 01455 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01456 { return static_cast<__int128>(0); } 01457 01458 static _GLIBCXX_CONSTEXPR __int128 01459 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01460 { return static_cast<__int128>(0); } 01461 01462 static _GLIBCXX_CONSTEXPR __int128 01463 denorm_min() _GLIBCXX_USE_NOEXCEPT 01464 { return static_cast<__int128>(0); } 01465 01466 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01467 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01468 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01469 01470 static _GLIBCXX_USE_CONSTEXPR bool traps 01471 = __glibcxx_integral_traps; 01472 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01473 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01474 = round_toward_zero; 01475 }; 01476 01477 /// numeric_limits<unsigned __int128> specialization. 01478 template<> 01479 struct numeric_limits<unsigned __int128> 01480 { 01481 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01482 01483 static _GLIBCXX_CONSTEXPR unsigned __int128 01484 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01485 01486 static _GLIBCXX_CONSTEXPR unsigned __int128 01487 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); } 01488 01489 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01490 static constexpr unsigned __int128 01491 lowest() noexcept { return min(); } 01492 #endif 01493 01494 static _GLIBCXX_USE_CONSTEXPR int digits 01495 = __glibcxx_digits (unsigned __int128); 01496 static _GLIBCXX_USE_CONSTEXPR int digits10 01497 = __glibcxx_digits10 (unsigned __int128); 01498 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01499 static constexpr int max_digits10 = 0; 01500 #endif 01501 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01502 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01503 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01504 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01505 01506 static _GLIBCXX_CONSTEXPR unsigned __int128 01507 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01508 01509 static _GLIBCXX_CONSTEXPR unsigned __int128 01510 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01511 01512 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01513 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01514 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01515 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01516 01517 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01518 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01519 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01520 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01521 = denorm_absent; 01522 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01523 01524 static _GLIBCXX_CONSTEXPR unsigned __int128 01525 infinity() _GLIBCXX_USE_NOEXCEPT 01526 { return static_cast<unsigned __int128>(0); } 01527 01528 static _GLIBCXX_CONSTEXPR unsigned __int128 01529 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01530 { return static_cast<unsigned __int128>(0); } 01531 01532 static _GLIBCXX_CONSTEXPR unsigned __int128 01533 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01534 { return static_cast<unsigned __int128>(0); } 01535 01536 static _GLIBCXX_CONSTEXPR unsigned __int128 01537 denorm_min() _GLIBCXX_USE_NOEXCEPT 01538 { return static_cast<unsigned __int128>(0); } 01539 01540 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01541 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01542 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01543 01544 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01545 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01546 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01547 = round_toward_zero; 01548 }; 01549 #endif 01550 01551 /// numeric_limits<float> specialization. 01552 template<> 01553 struct numeric_limits<float> 01554 { 01555 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01556 01557 static _GLIBCXX_CONSTEXPR float 01558 min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; } 01559 01560 static _GLIBCXX_CONSTEXPR float 01561 max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; } 01562 01563 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01564 static constexpr float 01565 lowest() noexcept { return -__FLT_MAX__; } 01566 #endif 01567 01568 static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; 01569 static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; 01570 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01571 static constexpr int max_digits10 01572 = __glibcxx_max_digits10 (__FLT_MANT_DIG__); 01573 #endif 01574 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01575 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01576 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01577 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01578 01579 static _GLIBCXX_CONSTEXPR float 01580 epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; } 01581 01582 static _GLIBCXX_CONSTEXPR float 01583 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; } 01584 01585 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; 01586 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; 01587 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; 01588 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; 01589 01590 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; 01591 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; 01592 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01593 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01594 = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; 01595 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01596 = __glibcxx_float_has_denorm_loss; 01597 01598 static _GLIBCXX_CONSTEXPR float 01599 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); } 01600 01601 static _GLIBCXX_CONSTEXPR float 01602 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); } 01603 01604 static _GLIBCXX_CONSTEXPR float 01605 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); } 01606 01607 static _GLIBCXX_CONSTEXPR float 01608 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; } 01609 01610 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01611 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01612 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01613 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01614 01615 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; 01616 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 01617 = __glibcxx_float_tinyness_before; 01618 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01619 = round_to_nearest; 01620 }; 01621 01622 #undef __glibcxx_float_has_denorm_loss 01623 #undef __glibcxx_float_traps 01624 #undef __glibcxx_float_tinyness_before 01625 01626 /// numeric_limits<double> specialization. 01627 template<> 01628 struct numeric_limits<double> 01629 { 01630 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01631 01632 static _GLIBCXX_CONSTEXPR double 01633 min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; } 01634 01635 static _GLIBCXX_CONSTEXPR double 01636 max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; } 01637 01638 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01639 static constexpr double 01640 lowest() noexcept { return -__DBL_MAX__; } 01641 #endif 01642 01643 static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; 01644 static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; 01645 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01646 static constexpr int max_digits10 01647 = __glibcxx_max_digits10 (__DBL_MANT_DIG__); 01648 #endif 01649 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01650 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01651 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01652 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01653 01654 static _GLIBCXX_CONSTEXPR double 01655 epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; } 01656 01657 static _GLIBCXX_CONSTEXPR double 01658 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } 01659 01660 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; 01661 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; 01662 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; 01663 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; 01664 01665 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; 01666 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; 01667 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01668 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01669 = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; 01670 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01671 = __glibcxx_double_has_denorm_loss; 01672 01673 static _GLIBCXX_CONSTEXPR double 01674 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); } 01675 01676 static _GLIBCXX_CONSTEXPR double 01677 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); } 01678 01679 static _GLIBCXX_CONSTEXPR double 01680 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); } 01681 01682 static _GLIBCXX_CONSTEXPR double 01683 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; } 01684 01685 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01686 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01687 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01688 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01689 01690 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; 01691 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 01692 = __glibcxx_double_tinyness_before; 01693 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01694 = round_to_nearest; 01695 }; 01696 01697 #undef __glibcxx_double_has_denorm_loss 01698 #undef __glibcxx_double_traps 01699 #undef __glibcxx_double_tinyness_before 01700 01701 /// numeric_limits<long double> specialization. 01702 template<> 01703 struct numeric_limits<long double> 01704 { 01705 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01706 01707 static _GLIBCXX_CONSTEXPR long double 01708 min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; } 01709 01710 static _GLIBCXX_CONSTEXPR long double 01711 max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; } 01712 01713 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01714 static constexpr long double 01715 lowest() noexcept { return -__LDBL_MAX__; } 01716 #endif 01717 01718 static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; 01719 static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; 01720 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01721 static _GLIBCXX_USE_CONSTEXPR int max_digits10 01722 = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); 01723 #endif 01724 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01725 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01726 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01727 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01728 01729 static _GLIBCXX_CONSTEXPR long double 01730 epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; } 01731 01732 static _GLIBCXX_CONSTEXPR long double 01733 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; } 01734 01735 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; 01736 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; 01737 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; 01738 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; 01739 01740 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; 01741 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; 01742 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01743 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01744 = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; 01745 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01746 = __glibcxx_long_double_has_denorm_loss; 01747 01748 static _GLIBCXX_CONSTEXPR long double 01749 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); } 01750 01751 static _GLIBCXX_CONSTEXPR long double 01752 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); } 01753 01754 static _GLIBCXX_CONSTEXPR long double 01755 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); } 01756 01757 static _GLIBCXX_CONSTEXPR long double 01758 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; } 01759 01760 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01761 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01762 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01763 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01764 01765 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; 01766 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 01767 __glibcxx_long_double_tinyness_before; 01768 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 01769 round_to_nearest; 01770 }; 01771 01772 #undef __glibcxx_long_double_has_denorm_loss 01773 #undef __glibcxx_long_double_traps 01774 #undef __glibcxx_long_double_tinyness_before 01775 01776 _GLIBCXX_END_NAMESPACE_VERSION 01777 } // namespace 01778 01779 #undef __glibcxx_signed 01780 #undef __glibcxx_min 01781 #undef __glibcxx_max 01782 #undef __glibcxx_digits 01783 #undef __glibcxx_digits10 01784 #undef __glibcxx_max_digits10 01785 01786 #endif // _GLIBCXX_NUMERIC_LIMITS