|
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. A type is modulo if, for any 00274 operation involving +, -, or * on values of that type whose 00275 result would fall outside the range [min(),max()], the value 00276 returned differs from the true value by an integer multiple of 00277 max() - min() + 1. On most machines, this is false for floating 00278 types, true for unsigned integers, and true for signed integers. 00279 See PR22200 about signed integers. */ 00280 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00281 00282 /** True if trapping is implemented for this type. */ 00283 static _GLIBCXX_USE_CONSTEXPR bool traps = false; 00284 00285 /** True if tininess is detected before rounding. (see IEC 559) */ 00286 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00287 00288 /** See std::float_round_style for more information. This is only 00289 meaningful for floating types; integer types will all be 00290 round_toward_zero. */ 00291 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 00292 round_toward_zero; 00293 }; 00294 00295 /** 00296 * @brief Properties of fundamental types. 00297 * 00298 * This class allows a program to obtain information about the 00299 * representation of a fundamental type on a given platform. For 00300 * non-fundamental types, the functions will return 0 and the data 00301 * members will all be @c false. 00302 * 00303 * _GLIBCXX_RESOLVE_LIB_DEFECTS: DRs 201 and 184 (hi Gaby!) are 00304 * noted, but not incorporated in this documented (yet). 00305 */ 00306 template<typename _Tp> 00307 struct numeric_limits : public __numeric_limits_base 00308 { 00309 /** The minimum finite value, or for floating types with 00310 denormalization, the minimum positive normalized value. */ 00311 static _GLIBCXX_CONSTEXPR _Tp 00312 min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00313 00314 /** The maximum finite value. */ 00315 static _GLIBCXX_CONSTEXPR _Tp 00316 max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00317 00318 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00319 /** A finite value x such that there is no other finite value y 00320 * where y < x. */ 00321 static constexpr _Tp 00322 lowest() noexcept { return _Tp(); } 00323 #endif 00324 00325 /** The @e machine @e epsilon: the difference between 1 and the least 00326 value greater than 1 that is representable. */ 00327 static _GLIBCXX_CONSTEXPR _Tp 00328 epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00329 00330 /** The maximum rounding error measurement (see LIA-1). */ 00331 static _GLIBCXX_CONSTEXPR _Tp 00332 round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00333 00334 /** The representation of positive infinity, if @c has_infinity. */ 00335 static _GLIBCXX_CONSTEXPR _Tp 00336 infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00337 00338 /** The representation of a quiet <em>Not a Number</em>, 00339 if @c has_quiet_NaN. */ 00340 static _GLIBCXX_CONSTEXPR _Tp 00341 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00342 00343 /** The representation of a signaling <em>Not a Number</em>, if 00344 @c has_signaling_NaN. */ 00345 static _GLIBCXX_CONSTEXPR _Tp 00346 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00347 00348 /** The minimum positive denormalized value. For types where 00349 @c has_denorm is false, this is the minimum positive normalized 00350 value. */ 00351 static _GLIBCXX_CONSTEXPR _Tp 00352 denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 00353 }; 00354 00355 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00356 template<typename _Tp> 00357 struct numeric_limits<const _Tp> 00358 : public numeric_limits<_Tp> { }; 00359 00360 template<typename _Tp> 00361 struct numeric_limits<volatile _Tp> 00362 : public numeric_limits<_Tp> { }; 00363 00364 template<typename _Tp> 00365 struct numeric_limits<const volatile _Tp> 00366 : public numeric_limits<_Tp> { }; 00367 #endif 00368 00369 // Now there follow 16 explicit specializations. Yes, 16. Make sure 00370 // you get the count right. (18 in c++0x mode) 00371 00372 /// numeric_limits<bool> specialization. 00373 template<> 00374 struct numeric_limits<bool> 00375 { 00376 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00377 00378 static _GLIBCXX_CONSTEXPR bool 00379 min() _GLIBCXX_USE_NOEXCEPT { return false; } 00380 00381 static _GLIBCXX_CONSTEXPR bool 00382 max() _GLIBCXX_USE_NOEXCEPT { return true; } 00383 00384 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00385 static constexpr bool 00386 lowest() noexcept { return min(); } 00387 #endif 00388 static _GLIBCXX_USE_CONSTEXPR int digits = 1; 00389 static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 00390 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00391 static constexpr int max_digits10 = 0; 00392 #endif 00393 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00394 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00395 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00396 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00397 00398 static _GLIBCXX_CONSTEXPR bool 00399 epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } 00400 00401 static _GLIBCXX_CONSTEXPR bool 00402 round_error() _GLIBCXX_USE_NOEXCEPT { return false; } 00403 00404 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00405 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00406 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00407 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00408 00409 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00410 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00411 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00412 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00413 = denorm_absent; 00414 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00415 00416 static _GLIBCXX_CONSTEXPR bool 00417 infinity() _GLIBCXX_USE_NOEXCEPT { return false; } 00418 00419 static _GLIBCXX_CONSTEXPR bool 00420 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 00421 00422 static _GLIBCXX_CONSTEXPR bool 00423 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 00424 00425 static _GLIBCXX_CONSTEXPR bool 00426 denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; } 00427 00428 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00429 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00430 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00431 00432 // It is not clear what it means for a boolean type to trap. 00433 // This is a DR on the LWG issue list. Here, I use integer 00434 // promotion semantics. 00435 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00436 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00437 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00438 = round_toward_zero; 00439 }; 00440 00441 /// numeric_limits<char> specialization. 00442 template<> 00443 struct numeric_limits<char> 00444 { 00445 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00446 00447 static _GLIBCXX_CONSTEXPR char 00448 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); } 00449 00450 static _GLIBCXX_CONSTEXPR char 00451 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); } 00452 00453 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00454 static constexpr char 00455 lowest() noexcept { return min(); } 00456 #endif 00457 00458 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); 00459 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); 00460 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00461 static constexpr int max_digits10 = 0; 00462 #endif 00463 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); 00464 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00465 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00466 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00467 00468 static _GLIBCXX_CONSTEXPR char 00469 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00470 00471 static _GLIBCXX_CONSTEXPR char 00472 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00473 00474 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00475 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00476 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00477 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00478 00479 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00480 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00481 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00482 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00483 = denorm_absent; 00484 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00485 00486 static _GLIBCXX_CONSTEXPR 00487 char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); } 00488 00489 static _GLIBCXX_CONSTEXPR char 00490 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 00491 00492 static _GLIBCXX_CONSTEXPR char 00493 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 00494 00495 static _GLIBCXX_CONSTEXPR char 00496 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); } 00497 00498 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00499 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00500 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 00501 00502 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00503 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00504 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00505 = round_toward_zero; 00506 }; 00507 00508 /// numeric_limits<signed char> specialization. 00509 template<> 00510 struct numeric_limits<signed char> 00511 { 00512 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00513 00514 static _GLIBCXX_CONSTEXPR signed char 00515 min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; } 00516 00517 static _GLIBCXX_CONSTEXPR signed char 00518 max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; } 00519 00520 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00521 static constexpr signed char 00522 lowest() noexcept { return min(); } 00523 #endif 00524 00525 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); 00526 static _GLIBCXX_USE_CONSTEXPR int digits10 00527 = __glibcxx_digits10 (signed char); 00528 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00529 static constexpr int max_digits10 = 0; 00530 #endif 00531 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 00532 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00533 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00534 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00535 00536 static _GLIBCXX_CONSTEXPR signed char 00537 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00538 00539 static _GLIBCXX_CONSTEXPR signed char 00540 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00541 00542 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00543 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00544 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00545 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00546 00547 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00548 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00549 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00550 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00551 = denorm_absent; 00552 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00553 00554 static _GLIBCXX_CONSTEXPR signed char 00555 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 00556 00557 static _GLIBCXX_CONSTEXPR signed char 00558 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 00559 00560 static _GLIBCXX_CONSTEXPR signed char 00561 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00562 { return static_cast<signed char>(0); } 00563 00564 static _GLIBCXX_CONSTEXPR signed char 00565 denorm_min() _GLIBCXX_USE_NOEXCEPT 00566 { return static_cast<signed char>(0); } 00567 00568 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00569 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00570 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00571 00572 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00573 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00574 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00575 = round_toward_zero; 00576 }; 00577 00578 /// numeric_limits<unsigned char> specialization. 00579 template<> 00580 struct numeric_limits<unsigned char> 00581 { 00582 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00583 00584 static _GLIBCXX_CONSTEXPR unsigned char 00585 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 00586 00587 static _GLIBCXX_CONSTEXPR unsigned char 00588 max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; } 00589 00590 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00591 static constexpr unsigned char 00592 lowest() noexcept { return min(); } 00593 #endif 00594 00595 static _GLIBCXX_USE_CONSTEXPR int digits 00596 = __glibcxx_digits (unsigned char); 00597 static _GLIBCXX_USE_CONSTEXPR int digits10 00598 = __glibcxx_digits10 (unsigned char); 00599 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00600 static constexpr int max_digits10 = 0; 00601 #endif 00602 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00603 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00604 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00605 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00606 00607 static _GLIBCXX_CONSTEXPR unsigned char 00608 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00609 00610 static _GLIBCXX_CONSTEXPR unsigned char 00611 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00612 00613 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00614 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00615 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00616 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00617 00618 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00619 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00620 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00621 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00622 = denorm_absent; 00623 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00624 00625 static _GLIBCXX_CONSTEXPR unsigned char 00626 infinity() _GLIBCXX_USE_NOEXCEPT 00627 { return static_cast<unsigned char>(0); } 00628 00629 static _GLIBCXX_CONSTEXPR unsigned char 00630 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 00631 { return static_cast<unsigned char>(0); } 00632 00633 static _GLIBCXX_CONSTEXPR unsigned char 00634 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00635 { return static_cast<unsigned char>(0); } 00636 00637 static _GLIBCXX_CONSTEXPR unsigned char 00638 denorm_min() _GLIBCXX_USE_NOEXCEPT 00639 { return static_cast<unsigned char>(0); } 00640 00641 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00642 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00643 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00644 00645 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00646 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00647 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00648 = round_toward_zero; 00649 }; 00650 00651 /// numeric_limits<wchar_t> specialization. 00652 template<> 00653 struct numeric_limits<wchar_t> 00654 { 00655 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00656 00657 static _GLIBCXX_CONSTEXPR wchar_t 00658 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); } 00659 00660 static _GLIBCXX_CONSTEXPR wchar_t 00661 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); } 00662 00663 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00664 static constexpr wchar_t 00665 lowest() noexcept { return min(); } 00666 #endif 00667 00668 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); 00669 static _GLIBCXX_USE_CONSTEXPR int digits10 00670 = __glibcxx_digits10 (wchar_t); 00671 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00672 static constexpr int max_digits10 = 0; 00673 #endif 00674 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); 00675 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00676 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00677 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00678 00679 static _GLIBCXX_CONSTEXPR wchar_t 00680 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00681 00682 static _GLIBCXX_CONSTEXPR wchar_t 00683 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00684 00685 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00686 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00687 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00688 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00689 00690 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00691 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00692 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00693 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00694 = denorm_absent; 00695 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00696 00697 static _GLIBCXX_CONSTEXPR wchar_t 00698 infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00699 00700 static _GLIBCXX_CONSTEXPR wchar_t 00701 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00702 00703 static _GLIBCXX_CONSTEXPR wchar_t 00704 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00705 00706 static _GLIBCXX_CONSTEXPR wchar_t 00707 denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 00708 00709 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00710 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00711 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 00712 00713 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00714 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00715 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00716 = round_toward_zero; 00717 }; 00718 00719 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00720 /// numeric_limits<char16_t> specialization. 00721 template<> 00722 struct numeric_limits<char16_t> 00723 { 00724 static constexpr bool is_specialized = true; 00725 00726 static constexpr char16_t 00727 min() noexcept { return __glibcxx_min (char16_t); } 00728 00729 static constexpr char16_t 00730 max() noexcept { return __glibcxx_max (char16_t); } 00731 00732 static constexpr char16_t 00733 lowest() noexcept { return min(); } 00734 00735 static constexpr int digits = __glibcxx_digits (char16_t); 00736 static constexpr int digits10 = __glibcxx_digits10 (char16_t); 00737 static constexpr int max_digits10 = 0; 00738 static constexpr bool is_signed = __glibcxx_signed (char16_t); 00739 static constexpr bool is_integer = true; 00740 static constexpr bool is_exact = true; 00741 static constexpr int radix = 2; 00742 00743 static constexpr char16_t 00744 epsilon() noexcept { return 0; } 00745 00746 static constexpr char16_t 00747 round_error() noexcept { return 0; } 00748 00749 static constexpr int min_exponent = 0; 00750 static constexpr int min_exponent10 = 0; 00751 static constexpr int max_exponent = 0; 00752 static constexpr int max_exponent10 = 0; 00753 00754 static constexpr bool has_infinity = false; 00755 static constexpr bool has_quiet_NaN = false; 00756 static constexpr bool has_signaling_NaN = false; 00757 static constexpr float_denorm_style has_denorm = denorm_absent; 00758 static constexpr bool has_denorm_loss = false; 00759 00760 static constexpr char16_t 00761 infinity() noexcept { return char16_t(); } 00762 00763 static constexpr char16_t 00764 quiet_NaN() noexcept { return char16_t(); } 00765 00766 static constexpr char16_t 00767 signaling_NaN() noexcept { return char16_t(); } 00768 00769 static constexpr char16_t 00770 denorm_min() noexcept { return char16_t(); } 00771 00772 static constexpr bool is_iec559 = false; 00773 static constexpr bool is_bounded = true; 00774 static constexpr bool is_modulo = !is_signed; 00775 00776 static constexpr bool traps = __glibcxx_integral_traps; 00777 static constexpr bool tinyness_before = false; 00778 static constexpr float_round_style round_style = round_toward_zero; 00779 }; 00780 00781 /// numeric_limits<char32_t> specialization. 00782 template<> 00783 struct numeric_limits<char32_t> 00784 { 00785 static constexpr bool is_specialized = true; 00786 00787 static constexpr char32_t 00788 min() noexcept { return __glibcxx_min (char32_t); } 00789 00790 static constexpr char32_t 00791 max() noexcept { return __glibcxx_max (char32_t); } 00792 00793 static constexpr char32_t 00794 lowest() noexcept { return min(); } 00795 00796 static constexpr int digits = __glibcxx_digits (char32_t); 00797 static constexpr int digits10 = __glibcxx_digits10 (char32_t); 00798 static constexpr int max_digits10 = 0; 00799 static constexpr bool is_signed = __glibcxx_signed (char32_t); 00800 static constexpr bool is_integer = true; 00801 static constexpr bool is_exact = true; 00802 static constexpr int radix = 2; 00803 00804 static constexpr char32_t 00805 epsilon() noexcept { return 0; } 00806 00807 static constexpr char32_t 00808 round_error() noexcept { return 0; } 00809 00810 static constexpr int min_exponent = 0; 00811 static constexpr int min_exponent10 = 0; 00812 static constexpr int max_exponent = 0; 00813 static constexpr int max_exponent10 = 0; 00814 00815 static constexpr bool has_infinity = false; 00816 static constexpr bool has_quiet_NaN = false; 00817 static constexpr bool has_signaling_NaN = false; 00818 static constexpr float_denorm_style has_denorm = denorm_absent; 00819 static constexpr bool has_denorm_loss = false; 00820 00821 static constexpr char32_t 00822 infinity() noexcept { return char32_t(); } 00823 00824 static constexpr char32_t 00825 quiet_NaN() noexcept { return char32_t(); } 00826 00827 static constexpr char32_t 00828 signaling_NaN() noexcept { return char32_t(); } 00829 00830 static constexpr char32_t 00831 denorm_min() noexcept { return char32_t(); } 00832 00833 static constexpr bool is_iec559 = false; 00834 static constexpr bool is_bounded = true; 00835 static constexpr bool is_modulo = !is_signed; 00836 00837 static constexpr bool traps = __glibcxx_integral_traps; 00838 static constexpr bool tinyness_before = false; 00839 static constexpr float_round_style round_style = round_toward_zero; 00840 }; 00841 #endif 00842 00843 /// numeric_limits<short> specialization. 00844 template<> 00845 struct numeric_limits<short> 00846 { 00847 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00848 00849 static _GLIBCXX_CONSTEXPR short 00850 min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; } 00851 00852 static _GLIBCXX_CONSTEXPR short 00853 max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; } 00854 00855 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00856 static constexpr short 00857 lowest() noexcept { return min(); } 00858 #endif 00859 00860 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); 00861 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); 00862 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00863 static constexpr int max_digits10 = 0; 00864 #endif 00865 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 00866 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00867 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00868 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00869 00870 static _GLIBCXX_CONSTEXPR short 00871 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00872 00873 static _GLIBCXX_CONSTEXPR short 00874 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00875 00876 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00877 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00878 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00879 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00880 00881 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00882 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00883 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00884 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00885 = denorm_absent; 00886 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00887 00888 static _GLIBCXX_CONSTEXPR short 00889 infinity() _GLIBCXX_USE_NOEXCEPT { return short(); } 00890 00891 static _GLIBCXX_CONSTEXPR short 00892 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 00893 00894 static _GLIBCXX_CONSTEXPR short 00895 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 00896 00897 static _GLIBCXX_CONSTEXPR short 00898 denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); } 00899 00900 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00901 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00902 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 00903 00904 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00905 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00906 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00907 = round_toward_zero; 00908 }; 00909 00910 /// numeric_limits<unsigned short> specialization. 00911 template<> 00912 struct numeric_limits<unsigned short> 00913 { 00914 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00915 00916 static _GLIBCXX_CONSTEXPR unsigned short 00917 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 00918 00919 static _GLIBCXX_CONSTEXPR unsigned short 00920 max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; } 00921 00922 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00923 static constexpr unsigned short 00924 lowest() noexcept { return min(); } 00925 #endif 00926 00927 static _GLIBCXX_USE_CONSTEXPR int digits 00928 = __glibcxx_digits (unsigned short); 00929 static _GLIBCXX_USE_CONSTEXPR int digits10 00930 = __glibcxx_digits10 (unsigned short); 00931 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00932 static constexpr int max_digits10 = 0; 00933 #endif 00934 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 00935 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 00936 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 00937 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 00938 00939 static _GLIBCXX_CONSTEXPR unsigned short 00940 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 00941 00942 static _GLIBCXX_CONSTEXPR unsigned short 00943 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 00944 00945 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 00946 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 00947 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 00948 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 00949 00950 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 00951 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 00952 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 00953 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 00954 = denorm_absent; 00955 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 00956 00957 static _GLIBCXX_CONSTEXPR unsigned short 00958 infinity() _GLIBCXX_USE_NOEXCEPT 00959 { return static_cast<unsigned short>(0); } 00960 00961 static _GLIBCXX_CONSTEXPR unsigned short 00962 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 00963 { return static_cast<unsigned short>(0); } 00964 00965 static _GLIBCXX_CONSTEXPR unsigned short 00966 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 00967 { return static_cast<unsigned short>(0); } 00968 00969 static _GLIBCXX_CONSTEXPR unsigned short 00970 denorm_min() _GLIBCXX_USE_NOEXCEPT 00971 { return static_cast<unsigned short>(0); } 00972 00973 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 00974 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 00975 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 00976 00977 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 00978 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 00979 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 00980 = round_toward_zero; 00981 }; 00982 00983 /// numeric_limits<int> specialization. 00984 template<> 00985 struct numeric_limits<int> 00986 { 00987 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 00988 00989 static _GLIBCXX_CONSTEXPR int 00990 min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; } 00991 00992 static _GLIBCXX_CONSTEXPR int 00993 max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; } 00994 00995 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00996 static constexpr int 00997 lowest() noexcept { return min(); } 00998 #endif 00999 01000 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); 01001 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); 01002 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01003 static constexpr int max_digits10 = 0; 01004 #endif 01005 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01006 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01007 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01008 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01009 01010 static _GLIBCXX_CONSTEXPR int 01011 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01012 01013 static _GLIBCXX_CONSTEXPR int 01014 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01015 01016 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01017 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01018 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01019 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01020 01021 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01022 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01023 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01024 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01025 = denorm_absent; 01026 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01027 01028 static _GLIBCXX_CONSTEXPR int 01029 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01030 01031 static _GLIBCXX_CONSTEXPR int 01032 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01033 01034 static _GLIBCXX_CONSTEXPR int 01035 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01036 01037 static _GLIBCXX_CONSTEXPR int 01038 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 01039 01040 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01041 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01042 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01043 01044 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01045 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01046 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01047 = round_toward_zero; 01048 }; 01049 01050 /// numeric_limits<unsigned int> specialization. 01051 template<> 01052 struct numeric_limits<unsigned int> 01053 { 01054 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01055 01056 static _GLIBCXX_CONSTEXPR unsigned int 01057 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01058 01059 static _GLIBCXX_CONSTEXPR unsigned int 01060 max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; } 01061 01062 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01063 static constexpr unsigned int 01064 lowest() noexcept { return min(); } 01065 #endif 01066 01067 static _GLIBCXX_USE_CONSTEXPR int digits 01068 = __glibcxx_digits (unsigned int); 01069 static _GLIBCXX_USE_CONSTEXPR int digits10 01070 = __glibcxx_digits10 (unsigned int); 01071 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01072 static constexpr int max_digits10 = 0; 01073 #endif 01074 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01075 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01076 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01077 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01078 01079 static _GLIBCXX_CONSTEXPR unsigned int 01080 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01081 01082 static _GLIBCXX_CONSTEXPR unsigned int 01083 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01084 01085 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01086 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01087 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01088 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01089 01090 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01091 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01092 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01093 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01094 = denorm_absent; 01095 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01096 01097 static _GLIBCXX_CONSTEXPR unsigned int 01098 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); } 01099 01100 static _GLIBCXX_CONSTEXPR unsigned int 01101 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01102 { return static_cast<unsigned int>(0); } 01103 01104 static _GLIBCXX_CONSTEXPR unsigned int 01105 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01106 { return static_cast<unsigned int>(0); } 01107 01108 static _GLIBCXX_CONSTEXPR unsigned int 01109 denorm_min() _GLIBCXX_USE_NOEXCEPT 01110 { return static_cast<unsigned int>(0); } 01111 01112 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01113 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01114 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01115 01116 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01117 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01118 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01119 = round_toward_zero; 01120 }; 01121 01122 /// numeric_limits<long> specialization. 01123 template<> 01124 struct numeric_limits<long> 01125 { 01126 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01127 01128 static _GLIBCXX_CONSTEXPR long 01129 min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; } 01130 01131 static _GLIBCXX_CONSTEXPR long 01132 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; } 01133 01134 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01135 static constexpr long 01136 lowest() noexcept { return min(); } 01137 #endif 01138 01139 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); 01140 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); 01141 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01142 static constexpr int max_digits10 = 0; 01143 #endif 01144 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01145 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01146 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01147 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01148 01149 static _GLIBCXX_CONSTEXPR long 01150 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01151 01152 static _GLIBCXX_CONSTEXPR long 01153 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01154 01155 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01156 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01157 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01158 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01159 01160 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01161 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01162 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01163 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01164 = denorm_absent; 01165 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01166 01167 static _GLIBCXX_CONSTEXPR long 01168 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01169 01170 static _GLIBCXX_CONSTEXPR long 01171 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01172 01173 static _GLIBCXX_CONSTEXPR long 01174 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01175 01176 static _GLIBCXX_CONSTEXPR long 01177 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 01178 01179 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01180 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01181 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01182 01183 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01184 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01185 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01186 = round_toward_zero; 01187 }; 01188 01189 /// numeric_limits<unsigned long> specialization. 01190 template<> 01191 struct numeric_limits<unsigned long> 01192 { 01193 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01194 01195 static _GLIBCXX_CONSTEXPR unsigned long 01196 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01197 01198 static _GLIBCXX_CONSTEXPR unsigned long 01199 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; } 01200 01201 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01202 static constexpr unsigned long 01203 lowest() noexcept { return min(); } 01204 #endif 01205 01206 static _GLIBCXX_USE_CONSTEXPR int digits 01207 = __glibcxx_digits (unsigned long); 01208 static _GLIBCXX_USE_CONSTEXPR int digits10 01209 = __glibcxx_digits10 (unsigned long); 01210 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01211 static constexpr int max_digits10 = 0; 01212 #endif 01213 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01214 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01215 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01216 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01217 01218 static _GLIBCXX_CONSTEXPR unsigned long 01219 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01220 01221 static _GLIBCXX_CONSTEXPR unsigned long 01222 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01223 01224 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01225 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01226 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01227 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01228 01229 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01230 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01231 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01232 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01233 = denorm_absent; 01234 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01235 01236 static _GLIBCXX_CONSTEXPR unsigned long 01237 infinity() _GLIBCXX_USE_NOEXCEPT 01238 { return static_cast<unsigned long>(0); } 01239 01240 static _GLIBCXX_CONSTEXPR unsigned long 01241 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01242 { return static_cast<unsigned long>(0); } 01243 01244 static _GLIBCXX_CONSTEXPR unsigned long 01245 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01246 { return static_cast<unsigned long>(0); } 01247 01248 static _GLIBCXX_CONSTEXPR unsigned long 01249 denorm_min() _GLIBCXX_USE_NOEXCEPT 01250 { return static_cast<unsigned long>(0); } 01251 01252 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01253 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01254 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01255 01256 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01257 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01258 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01259 = round_toward_zero; 01260 }; 01261 01262 /// numeric_limits<long long> specialization. 01263 template<> 01264 struct numeric_limits<long long> 01265 { 01266 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01267 01268 static _GLIBCXX_CONSTEXPR long long 01269 min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; } 01270 01271 static _GLIBCXX_CONSTEXPR long long 01272 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; } 01273 01274 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01275 static constexpr long long 01276 lowest() noexcept { return min(); } 01277 #endif 01278 01279 static _GLIBCXX_USE_CONSTEXPR int digits 01280 = __glibcxx_digits (long long); 01281 static _GLIBCXX_USE_CONSTEXPR int digits10 01282 = __glibcxx_digits10 (long long); 01283 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01284 static constexpr int max_digits10 = 0; 01285 #endif 01286 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01287 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01288 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01289 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01290 01291 static _GLIBCXX_CONSTEXPR long long 01292 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01293 01294 static _GLIBCXX_CONSTEXPR long long 01295 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01296 01297 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01298 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01299 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01300 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01301 01302 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01303 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01304 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01305 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01306 = denorm_absent; 01307 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01308 01309 static _GLIBCXX_CONSTEXPR long long 01310 infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01311 01312 static _GLIBCXX_CONSTEXPR long long 01313 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01314 01315 static _GLIBCXX_CONSTEXPR long long 01316 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01317 { return static_cast<long long>(0); } 01318 01319 static _GLIBCXX_CONSTEXPR long long 01320 denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 01321 01322 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01323 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01324 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01325 01326 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01327 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01328 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01329 = round_toward_zero; 01330 }; 01331 01332 /// numeric_limits<unsigned long long> specialization. 01333 template<> 01334 struct numeric_limits<unsigned long long> 01335 { 01336 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01337 01338 static _GLIBCXX_CONSTEXPR unsigned long long 01339 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01340 01341 static _GLIBCXX_CONSTEXPR unsigned long long 01342 max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; } 01343 01344 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01345 static constexpr unsigned long long 01346 lowest() noexcept { return min(); } 01347 #endif 01348 01349 static _GLIBCXX_USE_CONSTEXPR int digits 01350 = __glibcxx_digits (unsigned long long); 01351 static _GLIBCXX_USE_CONSTEXPR int digits10 01352 = __glibcxx_digits10 (unsigned long long); 01353 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01354 static constexpr int max_digits10 = 0; 01355 #endif 01356 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01357 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01358 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01359 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01360 01361 static _GLIBCXX_CONSTEXPR unsigned long long 01362 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01363 01364 static _GLIBCXX_CONSTEXPR unsigned long long 01365 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01366 01367 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01368 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01369 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01370 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01371 01372 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01373 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01374 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01375 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01376 = denorm_absent; 01377 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01378 01379 static _GLIBCXX_CONSTEXPR unsigned long long 01380 infinity() _GLIBCXX_USE_NOEXCEPT 01381 { return static_cast<unsigned long long>(0); } 01382 01383 static _GLIBCXX_CONSTEXPR unsigned long long 01384 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01385 { return static_cast<unsigned long long>(0); } 01386 01387 static _GLIBCXX_CONSTEXPR unsigned long long 01388 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01389 { return static_cast<unsigned long long>(0); } 01390 01391 static _GLIBCXX_CONSTEXPR unsigned long long 01392 denorm_min() _GLIBCXX_USE_NOEXCEPT 01393 { return static_cast<unsigned long long>(0); } 01394 01395 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01396 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01397 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01398 01399 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01400 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01401 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01402 = round_toward_zero; 01403 }; 01404 01405 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) 01406 /// numeric_limits<__int128> specialization. 01407 template<> 01408 struct numeric_limits<__int128> 01409 { 01410 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01411 01412 static _GLIBCXX_CONSTEXPR __int128 01413 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); } 01414 01415 static _GLIBCXX_CONSTEXPR __int128 01416 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); } 01417 01418 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01419 static constexpr __int128 01420 lowest() noexcept { return min(); } 01421 #endif 01422 01423 static _GLIBCXX_USE_CONSTEXPR int digits 01424 = __glibcxx_digits (__int128); 01425 static _GLIBCXX_USE_CONSTEXPR int digits10 01426 = __glibcxx_digits10 (__int128); 01427 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01428 static constexpr int max_digits10 = 0; 01429 #endif 01430 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01431 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01432 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01433 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01434 01435 static _GLIBCXX_CONSTEXPR __int128 01436 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01437 01438 static _GLIBCXX_CONSTEXPR __int128 01439 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01440 01441 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01442 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01443 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01444 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01445 01446 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01447 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01448 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01449 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01450 = denorm_absent; 01451 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01452 01453 static _GLIBCXX_CONSTEXPR __int128 01454 infinity() _GLIBCXX_USE_NOEXCEPT 01455 { return static_cast<__int128>(0); } 01456 01457 static _GLIBCXX_CONSTEXPR __int128 01458 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01459 { return static_cast<__int128>(0); } 01460 01461 static _GLIBCXX_CONSTEXPR __int128 01462 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01463 { return static_cast<__int128>(0); } 01464 01465 static _GLIBCXX_CONSTEXPR __int128 01466 denorm_min() _GLIBCXX_USE_NOEXCEPT 01467 { return static_cast<__int128>(0); } 01468 01469 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01470 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01471 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01472 01473 static _GLIBCXX_USE_CONSTEXPR bool traps 01474 = __glibcxx_integral_traps; 01475 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01476 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01477 = round_toward_zero; 01478 }; 01479 01480 /// numeric_limits<unsigned __int128> specialization. 01481 template<> 01482 struct numeric_limits<unsigned __int128> 01483 { 01484 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01485 01486 static _GLIBCXX_CONSTEXPR unsigned __int128 01487 min() _GLIBCXX_USE_NOEXCEPT { return 0; } 01488 01489 static _GLIBCXX_CONSTEXPR unsigned __int128 01490 max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); } 01491 01492 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01493 static constexpr unsigned __int128 01494 lowest() noexcept { return min(); } 01495 #endif 01496 01497 static _GLIBCXX_USE_CONSTEXPR int digits 01498 = __glibcxx_digits (unsigned __int128); 01499 static _GLIBCXX_USE_CONSTEXPR int digits10 01500 = __glibcxx_digits10 (unsigned __int128); 01501 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01502 static constexpr int max_digits10 = 0; 01503 #endif 01504 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 01505 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 01506 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 01507 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 01508 01509 static _GLIBCXX_CONSTEXPR unsigned __int128 01510 epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 01511 01512 static _GLIBCXX_CONSTEXPR unsigned __int128 01513 round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 01514 01515 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 01516 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 01517 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 01518 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 01519 01520 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 01521 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 01522 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 01523 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01524 = denorm_absent; 01525 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 01526 01527 static _GLIBCXX_CONSTEXPR unsigned __int128 01528 infinity() _GLIBCXX_USE_NOEXCEPT 01529 { return static_cast<unsigned __int128>(0); } 01530 01531 static _GLIBCXX_CONSTEXPR unsigned __int128 01532 quiet_NaN() _GLIBCXX_USE_NOEXCEPT 01533 { return static_cast<unsigned __int128>(0); } 01534 01535 static _GLIBCXX_CONSTEXPR unsigned __int128 01536 signaling_NaN() _GLIBCXX_USE_NOEXCEPT 01537 { return static_cast<unsigned __int128>(0); } 01538 01539 static _GLIBCXX_CONSTEXPR unsigned __int128 01540 denorm_min() _GLIBCXX_USE_NOEXCEPT 01541 { return static_cast<unsigned __int128>(0); } 01542 01543 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 01544 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01545 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 01546 01547 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 01548 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 01549 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01550 = round_toward_zero; 01551 }; 01552 #endif 01553 01554 /// numeric_limits<float> specialization. 01555 template<> 01556 struct numeric_limits<float> 01557 { 01558 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01559 01560 static _GLIBCXX_CONSTEXPR float 01561 min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; } 01562 01563 static _GLIBCXX_CONSTEXPR float 01564 max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; } 01565 01566 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01567 static constexpr float 01568 lowest() noexcept { return -__FLT_MAX__; } 01569 #endif 01570 01571 static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; 01572 static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; 01573 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01574 static constexpr int max_digits10 01575 = __glibcxx_max_digits10 (__FLT_MANT_DIG__); 01576 #endif 01577 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01578 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01579 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01580 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01581 01582 static _GLIBCXX_CONSTEXPR float 01583 epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; } 01584 01585 static _GLIBCXX_CONSTEXPR float 01586 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; } 01587 01588 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; 01589 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; 01590 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; 01591 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; 01592 01593 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; 01594 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; 01595 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01596 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01597 = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; 01598 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01599 = __glibcxx_float_has_denorm_loss; 01600 01601 static _GLIBCXX_CONSTEXPR float 01602 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); } 01603 01604 static _GLIBCXX_CONSTEXPR float 01605 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); } 01606 01607 static _GLIBCXX_CONSTEXPR float 01608 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); } 01609 01610 static _GLIBCXX_CONSTEXPR float 01611 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; } 01612 01613 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01614 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01615 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01616 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01617 01618 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; 01619 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 01620 = __glibcxx_float_tinyness_before; 01621 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01622 = round_to_nearest; 01623 }; 01624 01625 #undef __glibcxx_float_has_denorm_loss 01626 #undef __glibcxx_float_traps 01627 #undef __glibcxx_float_tinyness_before 01628 01629 /// numeric_limits<double> specialization. 01630 template<> 01631 struct numeric_limits<double> 01632 { 01633 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01634 01635 static _GLIBCXX_CONSTEXPR double 01636 min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; } 01637 01638 static _GLIBCXX_CONSTEXPR double 01639 max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; } 01640 01641 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01642 static constexpr double 01643 lowest() noexcept { return -__DBL_MAX__; } 01644 #endif 01645 01646 static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; 01647 static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; 01648 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01649 static constexpr int max_digits10 01650 = __glibcxx_max_digits10 (__DBL_MANT_DIG__); 01651 #endif 01652 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01653 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01654 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01655 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01656 01657 static _GLIBCXX_CONSTEXPR double 01658 epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; } 01659 01660 static _GLIBCXX_CONSTEXPR double 01661 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } 01662 01663 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; 01664 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; 01665 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; 01666 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; 01667 01668 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; 01669 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; 01670 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01671 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01672 = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; 01673 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01674 = __glibcxx_double_has_denorm_loss; 01675 01676 static _GLIBCXX_CONSTEXPR double 01677 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); } 01678 01679 static _GLIBCXX_CONSTEXPR double 01680 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); } 01681 01682 static _GLIBCXX_CONSTEXPR double 01683 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); } 01684 01685 static _GLIBCXX_CONSTEXPR double 01686 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; } 01687 01688 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01689 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01690 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01691 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01692 01693 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; 01694 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 01695 = __glibcxx_double_tinyness_before; 01696 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 01697 = round_to_nearest; 01698 }; 01699 01700 #undef __glibcxx_double_has_denorm_loss 01701 #undef __glibcxx_double_traps 01702 #undef __glibcxx_double_tinyness_before 01703 01704 /// numeric_limits<long double> specialization. 01705 template<> 01706 struct numeric_limits<long double> 01707 { 01708 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 01709 01710 static _GLIBCXX_CONSTEXPR long double 01711 min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; } 01712 01713 static _GLIBCXX_CONSTEXPR long double 01714 max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; } 01715 01716 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01717 static constexpr long double 01718 lowest() noexcept { return -__LDBL_MAX__; } 01719 #endif 01720 01721 static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; 01722 static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; 01723 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 01724 static _GLIBCXX_USE_CONSTEXPR int max_digits10 01725 = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); 01726 #endif 01727 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 01728 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 01729 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 01730 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 01731 01732 static _GLIBCXX_CONSTEXPR long double 01733 epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; } 01734 01735 static _GLIBCXX_CONSTEXPR long double 01736 round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; } 01737 01738 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; 01739 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; 01740 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; 01741 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; 01742 01743 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; 01744 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; 01745 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 01746 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 01747 = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; 01748 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 01749 = __glibcxx_long_double_has_denorm_loss; 01750 01751 static _GLIBCXX_CONSTEXPR long double 01752 infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); } 01753 01754 static _GLIBCXX_CONSTEXPR long double 01755 quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); } 01756 01757 static _GLIBCXX_CONSTEXPR long double 01758 signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); } 01759 01760 static _GLIBCXX_CONSTEXPR long double 01761 denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; } 01762 01763 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 01764 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 01765 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 01766 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 01767 01768 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; 01769 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 01770 __glibcxx_long_double_tinyness_before; 01771 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 01772 round_to_nearest; 01773 }; 01774 01775 #undef __glibcxx_long_double_has_denorm_loss 01776 #undef __glibcxx_long_double_traps 01777 #undef __glibcxx_long_double_tinyness_before 01778 01779 _GLIBCXX_END_NAMESPACE_VERSION 01780 } // namespace 01781 01782 #undef __glibcxx_signed 01783 #undef __glibcxx_min 01784 #undef __glibcxx_max 01785 #undef __glibcxx_digits 01786 #undef __glibcxx_digits10 01787 #undef __glibcxx_max_digits10 01788 01789 #endif // _GLIBCXX_NUMERIC_LIMITS