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