1 // The template and inlines for the numeric_limits classes. -*- C++ -*- 2 3 // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 4 // 2008, 2009, 2010 Free Software Foundation, Inc. 5 // 6 // This file is part of the GNU ISO C++ Library. This library is free 7 // software; you can redistribute it and/or modify it under the 8 // terms of the GNU General Public License as published by the 9 // Free Software Foundation; either version 3, or (at your option) 10 // any later version. 11 12 // This library is distributed in the hope that it will be useful, 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 // GNU General Public License for more details. 16 17 // Under Section 7 of GPL version 3, you are granted additional 18 // permissions described in the GCC Runtime Library Exception, version 19 // 3.1, as published by the Free Software Foundation. 20 21 // You should have received a copy of the GNU General Public License and 22 // a copy of the GCC Runtime Library Exception along with this program; 23 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 // <http://www.gnu.org/licenses/>. 25 26 /** @file include/limits 27 * This is a Standard C++ Library header. 28 */ 29 30 // Note: this is not a conforming implementation. 31 // Written by Gabriel Dos Reis <gdr (a] codesourcery.com> 32 33 // 34 // ISO 14882:1998 35 // 18.2.1 36 // 37 38 #ifndef _GLIBCXX_NUMERIC_LIMITS 39 #define _GLIBCXX_NUMERIC_LIMITS 1 40 41 #pragma GCC system_header 42 43 #include <bits/c++config.h> 44 45 // 46 // The numeric_limits<> traits document implementation-defined aspects 47 // of fundamental arithmetic data types (integers and floating points). 48 // From Standard C++ point of view, there are 14 such types: 49 // * integers 50 // bool (1) 51 // char, signed char, unsigned char, wchar_t (4) 52 // short, unsigned short (2) 53 // int, unsigned (2) 54 // long, unsigned long (2) 55 // 56 // * floating points 57 // float (1) 58 // double (1) 59 // long double (1) 60 // 61 // GNU C++ understands (where supported by the host C-library) 62 // * integer 63 // long long, unsigned long long (2) 64 // 65 // which brings us to 16 fundamental arithmetic data types in GNU C++. 66 // 67 // 68 // Since a numeric_limits<> is a bit tricky to get right, we rely on 69 // an interface composed of macros which should be defined in config/os 70 // or config/cpu when they differ from the generic (read arbitrary) 71 // definitions given here. 72 // 73 74 // These values can be overridden in the target configuration file. 75 // The default values are appropriate for many 32-bit targets. 76 77 // GCC only intrinsically supports modulo integral types. The only remaining 78 // integral exceptional values is division by zero. Only targets that do not 79 // signal division by zero in some "hard to ignore" way should use false. 80 #ifndef __glibcxx_integral_traps 81 # define __glibcxx_integral_traps true 82 #endif 83 84 // float 85 // 86 87 // Default values. Should be overridden in configuration files if necessary. 88 89 #ifndef __glibcxx_float_has_denorm_loss 90 # define __glibcxx_float_has_denorm_loss false 91 #endif 92 #ifndef __glibcxx_float_traps 93 # define __glibcxx_float_traps false 94 #endif 95 #ifndef __glibcxx_float_tinyness_before 96 # define __glibcxx_float_tinyness_before false 97 #endif 98 99 // double 100 101 // Default values. Should be overridden in configuration files if necessary. 102 103 #ifndef __glibcxx_double_has_denorm_loss 104 # define __glibcxx_double_has_denorm_loss false 105 #endif 106 #ifndef __glibcxx_double_traps 107 # define __glibcxx_double_traps false 108 #endif 109 #ifndef __glibcxx_double_tinyness_before 110 # define __glibcxx_double_tinyness_before false 111 #endif 112 113 // long double 114 115 // Default values. Should be overridden in configuration files if necessary. 116 117 #ifndef __glibcxx_long_double_has_denorm_loss 118 # define __glibcxx_long_double_has_denorm_loss false 119 #endif 120 #ifndef __glibcxx_long_double_traps 121 # define __glibcxx_long_double_traps false 122 #endif 123 #ifndef __glibcxx_long_double_tinyness_before 124 # define __glibcxx_long_double_tinyness_before false 125 #endif 126 127 // You should not need to define any macros below this point. 128 129 #define __glibcxx_signed(T) ((T)(-1) < 0) 130 131 #define __glibcxx_min(T) \ 132 (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0) 133 134 #define __glibcxx_max(T) \ 135 (__glibcxx_signed (T) ? \ 136 (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0) 137 138 #define __glibcxx_digits(T) \ 139 (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T)) 140 141 // The fraction 643/2136 approximates log10(2) to 7 significant digits. 142 #define __glibcxx_digits10(T) \ 143 (__glibcxx_digits (T) * 643L / 2136) 144 145 #define __glibcxx_max_digits10(T) \ 146 (2 + (T) * 643L / 2136) 147 148 namespace std _GLIBCXX_VISIBILITY(default) 149 { 150 _GLIBCXX_BEGIN_NAMESPACE_VERSION 151 152 /** 153 * @brief Describes the rounding style for floating-point types. 154 * 155 * This is used in the std::numeric_limits class. 156 */ 157 enum float_round_style 158 { 159 round_indeterminate = -1, /// Intermediate. 160 round_toward_zero = 0, /// To zero. 161 round_to_nearest = 1, /// To the nearest representable value. 162 round_toward_infinity = 2, /// To infinity. 163 round_toward_neg_infinity = 3 /// To negative infinity. 164 }; 165 166 /** 167 * @brief Describes the denormalization for floating-point types. 168 * 169 * These values represent the presence or absence of a variable number 170 * of exponent bits. This type is used in the std::numeric_limits class. 171 */ 172 enum float_denorm_style 173 { 174 /// Indeterminate at compile time whether denormalized values are allowed. 175 denorm_indeterminate = -1, 176 /// The type does not allow denormalized values. 177 denorm_absent = 0, 178 /// The type allows denormalized values. 179 denorm_present = 1 180 }; 181 182 /** 183 * @brief Part of std::numeric_limits. 184 * 185 * The @c static @c const members are usable as integral constant 186 * expressions. 187 * 188 * @note This is a separate class for purposes of efficiency; you 189 * should only access these members as part of an instantiation 190 * of the std::numeric_limits class. 191 */ 192 struct __numeric_limits_base 193 { 194 /** This will be true for all fundamental types (which have 195 specializations), and false for everything else. */ 196 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false; 197 198 /** The number of @c radix digits that be represented without change: for 199 integer types, the number of non-sign bits in the mantissa; for 200 floating types, the number of @c radix digits in the mantissa. */ 201 static _GLIBCXX_USE_CONSTEXPR int digits = 0; 202 203 /** The number of base 10 digits that can be represented without change. */ 204 static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 205 206 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 207 /** The number of base 10 digits required to ensure that values which 208 differ are always differentiated. */ 209 static constexpr int max_digits10 = 0; 210 #endif 211 212 /** True if the type is signed. */ 213 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 214 215 /** True if the type is integer. 216 * Is this supposed to be <em>if the type is integral?</em> */ 217 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 218 219 /** True if the type uses an exact representation. <em>All integer types are 220 exact, but not all exact types are integer. For example, rational and 221 fixed-exponent representations are exact but not integer.</em> 222 [18.2.1.2]/15 */ 223 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 224 225 /** For integer types, specifies the base of the representation. For 226 floating types, specifies the base of the exponent representation. */ 227 static _GLIBCXX_USE_CONSTEXPR int radix = 0; 228 229 /** The minimum negative integer such that @c radix raised to the power of 230 (one less than that integer) is a normalized floating point number. */ 231 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 232 233 /** The minimum negative integer such that 10 raised to that power is in 234 the range of normalized floating point numbers. */ 235 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 236 237 /** The maximum positive integer such that @c radix raised to the power of 238 (one less than that integer) is a representable finite floating point 239 number. */ 240 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 241 242 /** The maximum positive integer such that 10 raised to that power is in 243 the range of representable finite floating point numbers. */ 244 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 245 246 /** True if the type has a representation for positive infinity. */ 247 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 248 249 /** True if the type has a representation for a quiet (non-signaling) 250 <em>Not a Number</em>. */ 251 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 252 253 /** True if the type has a representation for a signaling 254 <em>Not a Number</em>. */ 255 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 256 257 /** See std::float_denorm_style for more information. */ 258 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent; 259 260 /** <em>True if loss of accuracy is detected as a denormalization loss, 261 rather than as an inexact result.</em> [18.2.1.2]/42 */ 262 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 263 264 /** True if-and-only-if the type adheres to the IEC 559 standard, also 265 known as IEEE 754. (Only makes sense for floating point types.) */ 266 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 267 268 /** <em>True if the set of values representable by the type is 269 finite. All built-in types are bounded, this member would be 270 false for arbitrary precision types.</em> [18.2.1.2]/54 */ 271 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false; 272 273 /** True if the type is @e modulo, that is, if it is possible to add two 274 positive numbers and have a result that wraps around to a third number 275 that is less. Typically false for floating types, true for unsigned 276 integers, and true for signed integers. */ 277 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 278 279 /** True if trapping is implemented for this type. */ 280 static _GLIBCXX_USE_CONSTEXPR bool traps = false; 281 282 /** True if tininess is detected before rounding. (see IEC 559) */ 283 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 284 285 /** See std::float_round_style for more information. This is only 286 meaningful for floating types; integer types will all be 287 round_toward_zero. */ 288 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 289 round_toward_zero; 290 }; 291 292 /** 293 * @brief Properties of fundamental types. 294 * 295 * This class allows a program to obtain information about the 296 * representation of a fundamental type on a given platform. For 297 * non-fundamental types, the functions will return 0 and the data 298 * members will all be @c false. 299 * 300 * _GLIBCXX_RESOLVE_LIB_DEFECTS: DRs 201 and 184 (hi Gaby!) are 301 * noted, but not incorporated in this documented (yet). 302 */ 303 template<typename _Tp> 304 struct numeric_limits : public __numeric_limits_base 305 { 306 /** The minimum finite value, or for floating types with 307 denormalization, the minimum positive normalized value. */ 308 static _GLIBCXX_CONSTEXPR _Tp 309 min() throw() { return static_cast<_Tp>(0); } 310 311 /** The maximum finite value. */ 312 static _GLIBCXX_CONSTEXPR _Tp 313 max() throw() { return static_cast<_Tp>(0); } 314 315 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 316 /** A finite value x such that there is no other finite value y 317 * where y < x. */ 318 static constexpr _Tp 319 lowest() throw() { return static_cast<_Tp>(0); } 320 #endif 321 322 /** The @e machine @e epsilon: the difference between 1 and the least 323 value greater than 1 that is representable. */ 324 static _GLIBCXX_CONSTEXPR _Tp 325 epsilon() throw() { return static_cast<_Tp>(0); } 326 327 /** The maximum rounding error measurement (see LIA-1). */ 328 static _GLIBCXX_CONSTEXPR _Tp 329 round_error() throw() { return static_cast<_Tp>(0); } 330 331 /** The representation of positive infinity, if @c has_infinity. */ 332 static _GLIBCXX_CONSTEXPR _Tp 333 infinity() throw() { return static_cast<_Tp>(0); } 334 335 /** The representation of a quiet <em>Not a Number</em>, 336 if @c has_quiet_NaN. */ 337 static _GLIBCXX_CONSTEXPR _Tp 338 quiet_NaN() throw() { return static_cast<_Tp>(0); } 339 340 /** The representation of a signaling <em>Not a Number</em>, if 341 @c has_signaling_NaN. */ 342 static _GLIBCXX_CONSTEXPR _Tp 343 signaling_NaN() throw() { return static_cast<_Tp>(0); } 344 345 /** The minimum positive denormalized value. For types where 346 @c has_denorm is false, this is the minimum positive normalized 347 value. */ 348 static _GLIBCXX_CONSTEXPR _Tp 349 denorm_min() throw() { return static_cast<_Tp>(0); } 350 }; 351 352 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 353 template<typename _Tp> 354 struct numeric_limits<const _Tp> 355 : public numeric_limits<_Tp> { }; 356 357 template<typename _Tp> 358 struct numeric_limits<volatile _Tp> 359 : public numeric_limits<_Tp> { }; 360 361 template<typename _Tp> 362 struct numeric_limits<const volatile _Tp> 363 : public numeric_limits<_Tp> { }; 364 #endif 365 366 // Now there follow 16 explicit specializations. Yes, 16. Make sure 367 // you get the count right. (18 in c++0x mode) 368 369 /// numeric_limits<bool> specialization. 370 template<> 371 struct numeric_limits<bool> 372 { 373 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 374 375 static _GLIBCXX_CONSTEXPR bool 376 min() throw() { return false; } 377 378 static _GLIBCXX_CONSTEXPR bool 379 max() throw() { return true; } 380 381 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 382 static constexpr bool 383 lowest() throw() { return min(); } 384 #endif 385 static _GLIBCXX_USE_CONSTEXPR int digits = 1; 386 static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 387 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 388 static constexpr int max_digits10 = 0; 389 #endif 390 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 391 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 392 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 393 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 394 395 static _GLIBCXX_CONSTEXPR bool 396 epsilon() throw() { return false; } 397 398 static _GLIBCXX_CONSTEXPR bool 399 round_error() throw() { return false; } 400 401 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 402 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 403 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 404 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 405 406 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 407 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 408 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 409 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 410 = denorm_absent; 411 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 412 413 static _GLIBCXX_CONSTEXPR bool 414 infinity() throw() { return false; } 415 416 static _GLIBCXX_CONSTEXPR bool 417 quiet_NaN() throw() { return false; } 418 419 static _GLIBCXX_CONSTEXPR bool 420 signaling_NaN() throw() { return false; } 421 422 static _GLIBCXX_CONSTEXPR bool 423 denorm_min() throw() { return false; } 424 425 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 426 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 427 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 428 429 // It is not clear what it means for a boolean type to trap. 430 // This is a DR on the LWG issue list. Here, I use integer 431 // promotion semantics. 432 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 433 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 434 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 435 = round_toward_zero; 436 }; 437 438 /// numeric_limits<char> specialization. 439 template<> 440 struct numeric_limits<char> 441 { 442 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 443 444 static _GLIBCXX_CONSTEXPR char 445 min() throw() { return __glibcxx_min(char); } 446 447 static _GLIBCXX_CONSTEXPR char 448 max() throw() { return __glibcxx_max(char); } 449 450 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 451 static constexpr char 452 lowest() throw() { return min(); } 453 #endif 454 455 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); 456 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); 457 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 458 static constexpr int max_digits10 = 0; 459 #endif 460 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); 461 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 462 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 463 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 464 465 static _GLIBCXX_CONSTEXPR char 466 epsilon() throw() { return 0; } 467 468 static _GLIBCXX_CONSTEXPR char 469 round_error() throw() { return 0; } 470 471 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 472 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 473 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 474 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 475 476 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 477 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 478 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 479 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 480 = denorm_absent; 481 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 482 483 static _GLIBCXX_CONSTEXPR 484 char infinity() throw() { return char(); } 485 486 static _GLIBCXX_CONSTEXPR char 487 quiet_NaN() throw() { return char(); } 488 489 static _GLIBCXX_CONSTEXPR char 490 signaling_NaN() throw() { return char(); } 491 492 static _GLIBCXX_CONSTEXPR char 493 denorm_min() throw() { return static_cast<char>(0); } 494 495 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 496 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 497 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 498 499 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 500 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 501 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 502 = round_toward_zero; 503 }; 504 505 /// numeric_limits<signed char> specialization. 506 template<> 507 struct numeric_limits<signed char> 508 { 509 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 510 511 static _GLIBCXX_CONSTEXPR signed char 512 min() throw() { return -__SCHAR_MAX__ - 1; } 513 514 static _GLIBCXX_CONSTEXPR signed char 515 max() throw() { return __SCHAR_MAX__; } 516 517 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 518 static constexpr signed char 519 lowest() throw() { return min(); } 520 #endif 521 522 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); 523 static _GLIBCXX_USE_CONSTEXPR int digits10 524 = __glibcxx_digits10 (signed char); 525 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 526 static constexpr int max_digits10 = 0; 527 #endif 528 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 529 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 530 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 531 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 532 533 static _GLIBCXX_CONSTEXPR signed char 534 epsilon() throw() { return 0; } 535 536 static _GLIBCXX_CONSTEXPR signed char 537 round_error() throw() { return 0; } 538 539 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 540 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 541 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 542 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 543 544 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 545 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 546 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 547 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 548 = denorm_absent; 549 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 550 551 static _GLIBCXX_CONSTEXPR signed char 552 infinity() throw() { return static_cast<signed char>(0); } 553 554 static _GLIBCXX_CONSTEXPR signed char 555 quiet_NaN() throw() { return static_cast<signed char>(0); } 556 557 static _GLIBCXX_CONSTEXPR signed char 558 signaling_NaN() throw() { return static_cast<signed char>(0); } 559 560 static _GLIBCXX_CONSTEXPR signed char 561 denorm_min() throw() { return static_cast<signed char>(0); } 562 563 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 564 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 565 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 566 567 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 568 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 569 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 570 = round_toward_zero; 571 }; 572 573 /// numeric_limits<unsigned char> specialization. 574 template<> 575 struct numeric_limits<unsigned char> 576 { 577 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 578 579 static _GLIBCXX_CONSTEXPR unsigned char 580 min() throw() { return 0; } 581 582 static _GLIBCXX_CONSTEXPR unsigned char 583 max() throw() { return __SCHAR_MAX__ * 2U + 1; } 584 585 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 586 static constexpr unsigned char 587 lowest() throw() { return min(); } 588 #endif 589 590 static _GLIBCXX_USE_CONSTEXPR int digits 591 = __glibcxx_digits (unsigned char); 592 static _GLIBCXX_USE_CONSTEXPR int digits10 593 = __glibcxx_digits10 (unsigned char); 594 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 595 static constexpr int max_digits10 = 0; 596 #endif 597 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 598 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 599 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 600 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 601 602 static _GLIBCXX_CONSTEXPR unsigned char 603 epsilon() throw() { return 0; } 604 605 static _GLIBCXX_CONSTEXPR unsigned char 606 round_error() throw() { return 0; } 607 608 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 609 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 610 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 611 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 612 613 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 614 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 615 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 616 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 617 = denorm_absent; 618 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 619 620 static _GLIBCXX_CONSTEXPR unsigned char 621 infinity() throw() { return static_cast<unsigned char>(0); } 622 623 static _GLIBCXX_CONSTEXPR unsigned char 624 quiet_NaN() throw() { return static_cast<unsigned char>(0); } 625 626 static _GLIBCXX_CONSTEXPR unsigned char 627 signaling_NaN() throw() { return static_cast<unsigned char>(0); } 628 629 static _GLIBCXX_CONSTEXPR unsigned char 630 denorm_min() throw() { return static_cast<unsigned char>(0); } 631 632 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 633 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 634 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 635 636 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 637 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 638 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 639 = round_toward_zero; 640 }; 641 642 /// numeric_limits<wchar_t> specialization. 643 template<> 644 struct numeric_limits<wchar_t> 645 { 646 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 647 648 static _GLIBCXX_CONSTEXPR wchar_t 649 min() throw() { return __glibcxx_min (wchar_t); } 650 651 static _GLIBCXX_CONSTEXPR wchar_t 652 max() throw() { return __glibcxx_max (wchar_t); } 653 654 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 655 static constexpr wchar_t 656 lowest() throw() { return min(); } 657 #endif 658 659 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); 660 static _GLIBCXX_USE_CONSTEXPR int digits10 661 = __glibcxx_digits10 (wchar_t); 662 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 663 static constexpr int max_digits10 = 0; 664 #endif 665 static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); 666 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 667 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 668 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 669 670 static _GLIBCXX_CONSTEXPR wchar_t 671 epsilon() throw() { return 0; } 672 673 static _GLIBCXX_CONSTEXPR wchar_t 674 round_error() throw() { return 0; } 675 676 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 677 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 678 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 679 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 680 681 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 682 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 683 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 684 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 685 = denorm_absent; 686 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 687 688 static _GLIBCXX_CONSTEXPR wchar_t 689 infinity() throw() { return wchar_t(); } 690 691 static _GLIBCXX_CONSTEXPR wchar_t 692 quiet_NaN() throw() { return wchar_t(); } 693 694 static _GLIBCXX_CONSTEXPR wchar_t 695 signaling_NaN() throw() { return wchar_t(); } 696 697 static _GLIBCXX_CONSTEXPR wchar_t 698 denorm_min() throw() { return wchar_t(); } 699 700 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 701 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 702 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 703 704 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 705 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 706 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 707 = round_toward_zero; 708 }; 709 710 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 711 /// numeric_limits<char16_t> specialization. 712 template<> 713 struct numeric_limits<char16_t> 714 { 715 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 716 717 static _GLIBCXX_CONSTEXPR char16_t 718 min() throw() { return __glibcxx_min (char16_t); } 719 720 static _GLIBCXX_CONSTEXPR char16_t 721 max() throw() { return __glibcxx_max (char16_t); } 722 723 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 724 static constexpr char16_t 725 lowest() throw() { return min(); } 726 #endif 727 728 static _GLIBCXX_USE_CONSTEXPR int digits 729 = __glibcxx_digits (char16_t); 730 static _GLIBCXX_USE_CONSTEXPR int digits10 731 = __glibcxx_digits10 (char16_t); 732 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 733 static constexpr int max_digits10 = 0; 734 #endif 735 static _GLIBCXX_USE_CONSTEXPR bool is_signed 736 = __glibcxx_signed (char16_t); 737 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 738 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 739 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 740 741 static _GLIBCXX_CONSTEXPR char16_t 742 epsilon() throw() { return 0; } 743 744 static _GLIBCXX_CONSTEXPR char16_t 745 round_error() throw() { return 0; } 746 747 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 748 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 749 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 750 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 751 752 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 753 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 754 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 755 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 756 = denorm_absent; 757 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 758 759 static _GLIBCXX_CONSTEXPR char16_t 760 infinity() throw() { return char16_t(); } 761 762 static _GLIBCXX_CONSTEXPR char16_t 763 quiet_NaN() throw() { return char16_t(); } 764 765 static _GLIBCXX_CONSTEXPR char16_t 766 signaling_NaN() throw() { return char16_t(); } 767 768 static _GLIBCXX_CONSTEXPR char16_t 769 denorm_min() throw() { return char16_t(); } 770 771 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 772 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 773 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 774 775 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 776 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 777 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 778 = round_toward_zero; 779 }; 780 781 /// numeric_limits<char32_t> specialization. 782 template<> 783 struct numeric_limits<char32_t> 784 { 785 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 786 787 static _GLIBCXX_CONSTEXPR char32_t 788 min() throw() { return __glibcxx_min (char32_t); } 789 790 static _GLIBCXX_CONSTEXPR char32_t 791 max() throw() { return __glibcxx_max (char32_t); } 792 793 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 794 static constexpr char32_t 795 lowest() throw() { return min(); } 796 #endif 797 798 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char32_t); 799 static _GLIBCXX_USE_CONSTEXPR int digits10 800 = __glibcxx_digits10 (char32_t); 801 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 802 static constexpr int max_digits10 = 0; 803 #endif 804 static _GLIBCXX_USE_CONSTEXPR bool is_signed 805 = __glibcxx_signed (char32_t); 806 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 807 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 808 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 809 810 static _GLIBCXX_CONSTEXPR char32_t 811 epsilon() throw() { return 0; } 812 813 static _GLIBCXX_CONSTEXPR char32_t 814 round_error() throw() { return 0; } 815 816 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 817 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 818 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 819 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 820 821 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 822 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 823 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 824 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 825 = denorm_absent; 826 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 827 828 static _GLIBCXX_CONSTEXPR char32_t 829 infinity() throw() { return char32_t(); } 830 831 static _GLIBCXX_CONSTEXPR char32_t 832 quiet_NaN() throw() { return char32_t(); } 833 834 static _GLIBCXX_CONSTEXPR char32_t 835 signaling_NaN() throw() { return char32_t(); } 836 837 static _GLIBCXX_CONSTEXPR char32_t 838 denorm_min() throw() { return char32_t(); } 839 840 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 841 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 842 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 843 844 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 845 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 846 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 847 = round_toward_zero; 848 }; 849 #endif 850 851 /// numeric_limits<short> specialization. 852 template<> 853 struct numeric_limits<short> 854 { 855 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 856 857 static _GLIBCXX_CONSTEXPR short 858 min() throw() { return -__SHRT_MAX__ - 1; } 859 860 static _GLIBCXX_CONSTEXPR short 861 max() throw() { return __SHRT_MAX__; } 862 863 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 864 static constexpr short 865 lowest() throw() { return min(); } 866 #endif 867 868 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); 869 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); 870 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 871 static constexpr int max_digits10 = 0; 872 #endif 873 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 874 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 875 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 876 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 877 878 static _GLIBCXX_CONSTEXPR short 879 epsilon() throw() { return 0; } 880 881 static _GLIBCXX_CONSTEXPR short 882 round_error() throw() { return 0; } 883 884 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 885 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 886 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 887 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 888 889 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 890 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 891 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 892 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 893 = denorm_absent; 894 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 895 896 static _GLIBCXX_CONSTEXPR short 897 infinity() throw() { return short(); } 898 899 static _GLIBCXX_CONSTEXPR short 900 quiet_NaN() throw() { return short(); } 901 902 static _GLIBCXX_CONSTEXPR short 903 signaling_NaN() throw() { return short(); } 904 905 static _GLIBCXX_CONSTEXPR short 906 denorm_min() throw() { return short(); } 907 908 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 909 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 910 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 911 912 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 913 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 914 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 915 = round_toward_zero; 916 }; 917 918 /// numeric_limits<unsigned short> specialization. 919 template<> 920 struct numeric_limits<unsigned short> 921 { 922 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 923 924 static _GLIBCXX_CONSTEXPR unsigned short 925 min() throw() { return 0; } 926 927 static _GLIBCXX_CONSTEXPR unsigned short 928 max() throw() { return __SHRT_MAX__ * 2U + 1; } 929 930 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 931 static constexpr unsigned short 932 lowest() throw() { return min(); } 933 #endif 934 935 static _GLIBCXX_USE_CONSTEXPR int digits 936 = __glibcxx_digits (unsigned short); 937 static _GLIBCXX_USE_CONSTEXPR int digits10 938 = __glibcxx_digits10 (unsigned short); 939 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 940 static constexpr int max_digits10 = 0; 941 #endif 942 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 943 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 944 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 945 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 946 947 static _GLIBCXX_CONSTEXPR unsigned short 948 epsilon() throw() { return 0; } 949 950 static _GLIBCXX_CONSTEXPR unsigned short 951 round_error() throw() { return 0; } 952 953 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 954 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 955 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 956 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 957 958 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 959 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 960 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 961 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 962 = denorm_absent; 963 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 964 965 static _GLIBCXX_CONSTEXPR unsigned short 966 infinity() throw() { return static_cast<unsigned short>(0); } 967 968 static _GLIBCXX_CONSTEXPR unsigned short 969 quiet_NaN() throw() { return static_cast<unsigned short>(0); } 970 971 static _GLIBCXX_CONSTEXPR unsigned short 972 signaling_NaN() throw() { return static_cast<unsigned short>(0); } 973 974 static _GLIBCXX_CONSTEXPR unsigned short 975 denorm_min() throw() { return static_cast<unsigned short>(0); } 976 977 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 978 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 979 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 980 981 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 982 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 983 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 984 = round_toward_zero; 985 }; 986 987 /// numeric_limits<int> specialization. 988 template<> 989 struct numeric_limits<int> 990 { 991 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 992 993 static _GLIBCXX_CONSTEXPR int 994 min() throw() { return -__INT_MAX__ - 1; } 995 996 static _GLIBCXX_CONSTEXPR int 997 max() throw() { return __INT_MAX__; } 998 999 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1000 static constexpr int 1001 lowest() throw() { return min(); } 1002 #endif 1003 1004 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); 1005 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); 1006 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1007 static constexpr int max_digits10 = 0; 1008 #endif 1009 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1010 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1011 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1012 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1013 1014 static _GLIBCXX_CONSTEXPR int 1015 epsilon() throw() { return 0; } 1016 1017 static _GLIBCXX_CONSTEXPR int 1018 round_error() throw() { return 0; } 1019 1020 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1021 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1022 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1023 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1024 1025 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1026 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1027 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1028 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1029 = denorm_absent; 1030 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1031 1032 static _GLIBCXX_CONSTEXPR int 1033 infinity() throw() { return static_cast<int>(0); } 1034 1035 static _GLIBCXX_CONSTEXPR int 1036 quiet_NaN() throw() { return static_cast<int>(0); } 1037 1038 static _GLIBCXX_CONSTEXPR int 1039 signaling_NaN() throw() { return static_cast<int>(0); } 1040 1041 static _GLIBCXX_CONSTEXPR int 1042 denorm_min() throw() { return static_cast<int>(0); } 1043 1044 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1045 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1046 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1047 1048 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1049 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1050 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1051 = round_toward_zero; 1052 }; 1053 1054 /// numeric_limits<unsigned int> specialization. 1055 template<> 1056 struct numeric_limits<unsigned int> 1057 { 1058 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1059 1060 static _GLIBCXX_CONSTEXPR unsigned int 1061 min() throw() { return 0; } 1062 1063 static _GLIBCXX_CONSTEXPR unsigned int 1064 max() throw() { return __INT_MAX__ * 2U + 1; } 1065 1066 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1067 static constexpr unsigned int 1068 lowest() throw() { return min(); } 1069 #endif 1070 1071 static _GLIBCXX_USE_CONSTEXPR int digits 1072 = __glibcxx_digits (unsigned int); 1073 static _GLIBCXX_USE_CONSTEXPR int digits10 1074 = __glibcxx_digits10 (unsigned int); 1075 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1076 static constexpr int max_digits10 = 0; 1077 #endif 1078 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 1079 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1080 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1081 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1082 1083 static _GLIBCXX_CONSTEXPR unsigned int 1084 epsilon() throw() { return 0; } 1085 1086 static _GLIBCXX_CONSTEXPR unsigned int 1087 round_error() throw() { return 0; } 1088 1089 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1090 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1091 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1092 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1093 1094 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1095 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1096 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1097 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1098 = denorm_absent; 1099 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1100 1101 static _GLIBCXX_CONSTEXPR unsigned int 1102 infinity() throw() { return static_cast<unsigned int>(0); } 1103 1104 static _GLIBCXX_CONSTEXPR unsigned int 1105 quiet_NaN() throw() { return static_cast<unsigned int>(0); } 1106 1107 static _GLIBCXX_CONSTEXPR unsigned int 1108 signaling_NaN() throw() { return static_cast<unsigned int>(0); } 1109 1110 static _GLIBCXX_CONSTEXPR unsigned int 1111 denorm_min() throw() { return static_cast<unsigned int>(0); } 1112 1113 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1114 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1115 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1116 1117 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1118 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1119 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1120 = round_toward_zero; 1121 }; 1122 1123 /// numeric_limits<long> specialization. 1124 template<> 1125 struct numeric_limits<long> 1126 { 1127 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1128 1129 static _GLIBCXX_CONSTEXPR long 1130 min() throw() { return -__LONG_MAX__ - 1; } 1131 1132 static _GLIBCXX_CONSTEXPR long 1133 max() throw() { return __LONG_MAX__; } 1134 1135 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1136 static constexpr long 1137 lowest() throw() { return min(); } 1138 #endif 1139 1140 static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); 1141 static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); 1142 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1143 static constexpr int max_digits10 = 0; 1144 #endif 1145 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1146 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1147 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1148 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1149 1150 static _GLIBCXX_CONSTEXPR long 1151 epsilon() throw() { return 0; } 1152 1153 static _GLIBCXX_CONSTEXPR long 1154 round_error() throw() { return 0; } 1155 1156 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1157 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1158 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1159 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1160 1161 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1162 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1163 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1164 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1165 = denorm_absent; 1166 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1167 1168 static _GLIBCXX_CONSTEXPR long 1169 infinity() throw() { return static_cast<long>(0); } 1170 1171 static _GLIBCXX_CONSTEXPR long 1172 quiet_NaN() throw() { return static_cast<long>(0); } 1173 1174 static _GLIBCXX_CONSTEXPR long 1175 signaling_NaN() throw() { return static_cast<long>(0); } 1176 1177 static _GLIBCXX_CONSTEXPR long 1178 denorm_min() throw() { return static_cast<long>(0); } 1179 1180 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1181 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1182 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1183 1184 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1185 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1186 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1187 = round_toward_zero; 1188 }; 1189 1190 /// numeric_limits<unsigned long> specialization. 1191 template<> 1192 struct numeric_limits<unsigned long> 1193 { 1194 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1195 1196 static _GLIBCXX_CONSTEXPR unsigned long 1197 min() throw() { return 0; } 1198 1199 static _GLIBCXX_CONSTEXPR unsigned long 1200 max() throw() { return __LONG_MAX__ * 2UL + 1; } 1201 1202 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1203 static constexpr unsigned long 1204 lowest() throw() { return min(); } 1205 #endif 1206 1207 static _GLIBCXX_USE_CONSTEXPR int digits 1208 = __glibcxx_digits (unsigned long); 1209 static _GLIBCXX_USE_CONSTEXPR int digits10 1210 = __glibcxx_digits10 (unsigned long); 1211 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1212 static constexpr int max_digits10 = 0; 1213 #endif 1214 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 1215 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1216 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1217 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1218 1219 static _GLIBCXX_CONSTEXPR unsigned long 1220 epsilon() throw() { return 0; } 1221 1222 static _GLIBCXX_CONSTEXPR unsigned long 1223 round_error() throw() { return 0; } 1224 1225 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1226 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1227 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1228 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1229 1230 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1231 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1232 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1233 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1234 = denorm_absent; 1235 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1236 1237 static _GLIBCXX_CONSTEXPR unsigned long 1238 infinity() throw() { return static_cast<unsigned long>(0); } 1239 1240 static _GLIBCXX_CONSTEXPR unsigned long 1241 quiet_NaN() throw() { return static_cast<unsigned long>(0); } 1242 1243 static _GLIBCXX_CONSTEXPR unsigned long 1244 signaling_NaN() throw() { return static_cast<unsigned long>(0); } 1245 1246 static _GLIBCXX_CONSTEXPR unsigned long 1247 denorm_min() throw() { return static_cast<unsigned long>(0); } 1248 1249 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1250 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1251 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1252 1253 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1254 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1255 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1256 = round_toward_zero; 1257 }; 1258 1259 /// numeric_limits<long long> specialization. 1260 template<> 1261 struct numeric_limits<long long> 1262 { 1263 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1264 1265 static _GLIBCXX_CONSTEXPR long long 1266 min() throw() { return -__LONG_LONG_MAX__ - 1; } 1267 1268 static _GLIBCXX_CONSTEXPR long long 1269 max() throw() { return __LONG_LONG_MAX__; } 1270 1271 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1272 static constexpr long long 1273 lowest() throw() { return min(); } 1274 #endif 1275 1276 static _GLIBCXX_USE_CONSTEXPR int digits 1277 = __glibcxx_digits (long long); 1278 static _GLIBCXX_USE_CONSTEXPR int digits10 1279 = __glibcxx_digits10 (long long); 1280 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1281 static constexpr int max_digits10 = 0; 1282 #endif 1283 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1284 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1285 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1286 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1287 1288 static _GLIBCXX_CONSTEXPR long long 1289 epsilon() throw() { return 0; } 1290 1291 static _GLIBCXX_CONSTEXPR long long 1292 round_error() throw() { return 0; } 1293 1294 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1295 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1296 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1297 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1298 1299 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1300 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1301 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1302 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1303 = denorm_absent; 1304 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1305 1306 static _GLIBCXX_CONSTEXPR long long 1307 infinity() throw() { return static_cast<long long>(0); } 1308 1309 static _GLIBCXX_CONSTEXPR long long 1310 quiet_NaN() throw() { return static_cast<long long>(0); } 1311 1312 static _GLIBCXX_CONSTEXPR long long 1313 signaling_NaN() throw() { return static_cast<long long>(0); } 1314 1315 static _GLIBCXX_CONSTEXPR long long 1316 denorm_min() throw() { return static_cast<long long>(0); } 1317 1318 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1319 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1320 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1321 1322 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1323 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1324 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1325 = round_toward_zero; 1326 }; 1327 1328 /// numeric_limits<unsigned long long> specialization. 1329 template<> 1330 struct numeric_limits<unsigned long long> 1331 { 1332 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1333 1334 static _GLIBCXX_CONSTEXPR unsigned long long 1335 min() throw() { return 0; } 1336 1337 static _GLIBCXX_CONSTEXPR unsigned long long 1338 max() throw() { return __LONG_LONG_MAX__ * 2ULL + 1; } 1339 1340 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1341 static constexpr unsigned long long 1342 lowest() throw() { return min(); } 1343 #endif 1344 1345 static _GLIBCXX_USE_CONSTEXPR int digits 1346 = __glibcxx_digits (unsigned long long); 1347 static _GLIBCXX_USE_CONSTEXPR int digits10 1348 = __glibcxx_digits10 (unsigned long long); 1349 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1350 static constexpr int max_digits10 = 0; 1351 #endif 1352 static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 1353 static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 1354 static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 1355 static _GLIBCXX_USE_CONSTEXPR int radix = 2; 1356 1357 static _GLIBCXX_CONSTEXPR unsigned long long 1358 epsilon() throw() { return 0; } 1359 1360 static _GLIBCXX_CONSTEXPR unsigned long long 1361 round_error() throw() { return 0; } 1362 1363 static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 1364 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 1365 static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 1366 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 1367 1368 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 1369 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 1370 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 1371 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1372 = denorm_absent; 1373 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 1374 1375 static _GLIBCXX_CONSTEXPR unsigned long long 1376 infinity() throw() { return static_cast<unsigned long long>(0); } 1377 1378 static _GLIBCXX_CONSTEXPR unsigned long long 1379 quiet_NaN() throw() { return static_cast<unsigned long long>(0); } 1380 1381 static _GLIBCXX_CONSTEXPR unsigned long long 1382 signaling_NaN() throw() { return static_cast<unsigned long long>(0); } 1383 1384 static _GLIBCXX_CONSTEXPR unsigned long long 1385 denorm_min() throw() { return static_cast<unsigned long long>(0); } 1386 1387 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 1388 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1389 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 1390 1391 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 1392 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 1393 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1394 = round_toward_zero; 1395 }; 1396 1397 /// numeric_limits<float> specialization. 1398 template<> 1399 struct numeric_limits<float> 1400 { 1401 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1402 1403 static _GLIBCXX_CONSTEXPR float 1404 min() throw() { return __FLT_MIN__; } 1405 1406 static _GLIBCXX_CONSTEXPR float 1407 max() throw() { return __FLT_MAX__; } 1408 1409 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1410 static constexpr float 1411 lowest() throw() { return -__FLT_MAX__; } 1412 #endif 1413 1414 static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; 1415 static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; 1416 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1417 static constexpr int max_digits10 1418 = __glibcxx_max_digits10 (__FLT_MANT_DIG__); 1419 #endif 1420 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1421 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 1422 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 1423 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 1424 1425 static _GLIBCXX_CONSTEXPR float 1426 epsilon() throw() { return __FLT_EPSILON__; } 1427 1428 static _GLIBCXX_CONSTEXPR float 1429 round_error() throw() { return 0.5F; } 1430 1431 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; 1432 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; 1433 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; 1434 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; 1435 1436 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; 1437 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; 1438 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 1439 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1440 = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; 1441 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 1442 = __glibcxx_float_has_denorm_loss; 1443 1444 static _GLIBCXX_CONSTEXPR float 1445 infinity() throw() { return __builtin_huge_valf (); } 1446 1447 static _GLIBCXX_CONSTEXPR float 1448 quiet_NaN() throw() { return __builtin_nanf (""); } 1449 1450 static _GLIBCXX_CONSTEXPR float 1451 signaling_NaN() throw() { return __builtin_nansf (""); } 1452 1453 static _GLIBCXX_CONSTEXPR float 1454 denorm_min() throw() { return __FLT_DENORM_MIN__; } 1455 1456 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 1457 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 1458 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1459 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 1460 1461 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; 1462 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 1463 = __glibcxx_float_tinyness_before; 1464 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1465 = round_to_nearest; 1466 }; 1467 1468 #undef __glibcxx_float_has_denorm_loss 1469 #undef __glibcxx_float_traps 1470 #undef __glibcxx_float_tinyness_before 1471 1472 /// numeric_limits<double> specialization. 1473 template<> 1474 struct numeric_limits<double> 1475 { 1476 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1477 1478 static _GLIBCXX_CONSTEXPR double 1479 min() throw() { return __DBL_MIN__; } 1480 1481 static _GLIBCXX_CONSTEXPR double 1482 max() throw() { return __DBL_MAX__; } 1483 1484 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1485 static constexpr double 1486 lowest() throw() { return -__DBL_MAX__; } 1487 #endif 1488 1489 static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; 1490 static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; 1491 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1492 static constexpr int max_digits10 1493 = __glibcxx_max_digits10 (__DBL_MANT_DIG__); 1494 #endif 1495 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1496 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 1497 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 1498 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 1499 1500 static _GLIBCXX_CONSTEXPR double 1501 epsilon() throw() { return __DBL_EPSILON__; } 1502 1503 static _GLIBCXX_CONSTEXPR double 1504 round_error() throw() { return 0.5; } 1505 1506 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; 1507 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; 1508 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; 1509 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; 1510 1511 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; 1512 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; 1513 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 1514 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1515 = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; 1516 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 1517 = __glibcxx_double_has_denorm_loss; 1518 1519 static _GLIBCXX_CONSTEXPR double 1520 infinity() throw() { return __builtin_huge_val(); } 1521 1522 static _GLIBCXX_CONSTEXPR double 1523 quiet_NaN() throw() { return __builtin_nan (""); } 1524 1525 static _GLIBCXX_CONSTEXPR double 1526 signaling_NaN() throw() { return __builtin_nans (""); } 1527 1528 static _GLIBCXX_CONSTEXPR double 1529 denorm_min() throw() { return __DBL_DENORM_MIN__; } 1530 1531 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 1532 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 1533 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1534 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 1535 1536 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; 1537 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 1538 = __glibcxx_double_tinyness_before; 1539 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 1540 = round_to_nearest; 1541 }; 1542 1543 #undef __glibcxx_double_has_denorm_loss 1544 #undef __glibcxx_double_traps 1545 #undef __glibcxx_double_tinyness_before 1546 1547 /// numeric_limits<long double> specialization. 1548 template<> 1549 struct numeric_limits<long double> 1550 { 1551 static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 1552 1553 static _GLIBCXX_CONSTEXPR long double 1554 min() throw() { return __LDBL_MIN__; } 1555 1556 static _GLIBCXX_CONSTEXPR long double 1557 max() throw() { return __LDBL_MAX__; } 1558 1559 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1560 static constexpr long double 1561 lowest() throw() { return -__LDBL_MAX__; } 1562 #endif 1563 1564 static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; 1565 static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; 1566 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 1567 static _GLIBCXX_USE_CONSTEXPR int max_digits10 1568 = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); 1569 #endif 1570 static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 1571 static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 1572 static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 1573 static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 1574 1575 static _GLIBCXX_CONSTEXPR long double 1576 epsilon() throw() { return __LDBL_EPSILON__; } 1577 1578 static _GLIBCXX_CONSTEXPR long double 1579 round_error() throw() { return 0.5L; } 1580 1581 static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; 1582 static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; 1583 static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; 1584 static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; 1585 1586 static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; 1587 static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; 1588 static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 1589 static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 1590 = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; 1591 static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 1592 = __glibcxx_long_double_has_denorm_loss; 1593 1594 static _GLIBCXX_CONSTEXPR long double 1595 infinity() throw() { return __builtin_huge_vall (); } 1596 1597 static _GLIBCXX_CONSTEXPR long double 1598 quiet_NaN() throw() { return __builtin_nanl (""); } 1599 1600 static _GLIBCXX_CONSTEXPR long double 1601 signaling_NaN() throw() { return __builtin_nansl (""); } 1602 1603 static _GLIBCXX_CONSTEXPR long double 1604 denorm_min() throw() { return __LDBL_DENORM_MIN__; } 1605 1606 static _GLIBCXX_USE_CONSTEXPR bool is_iec559 1607 = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 1608 static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 1609 static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 1610 1611 static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; 1612 static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 1613 __glibcxx_long_double_tinyness_before; 1614 static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 1615 round_to_nearest; 1616 }; 1617 1618 #undef __glibcxx_long_double_has_denorm_loss 1619 #undef __glibcxx_long_double_traps 1620 #undef __glibcxx_long_double_tinyness_before 1621 1622 _GLIBCXX_END_NAMESPACE_VERSION 1623 } // namespace 1624 1625 #undef __glibcxx_signed 1626 #undef __glibcxx_min 1627 #undef __glibcxx_max 1628 #undef __glibcxx_digits 1629 #undef __glibcxx_digits10 1630 #undef __glibcxx_max_digits10 1631 1632 #endif // _GLIBCXX_NUMERIC_LIMITS 1633