14fee23f9Smrg// The template and inlines for the numeric_limits classes. -*- C++ -*- 24fee23f9Smrg 3*b1e83836Smrg// Copyright (C) 1999-2022 Free Software Foundation, Inc. 44fee23f9Smrg// 54fee23f9Smrg// This file is part of the GNU ISO C++ Library. This library is free 64fee23f9Smrg// software; you can redistribute it and/or modify it under the 74fee23f9Smrg// terms of the GNU General Public License as published by the 84fee23f9Smrg// Free Software Foundation; either version 3, or (at your option) 94fee23f9Smrg// any later version. 104fee23f9Smrg 114fee23f9Smrg// This library is distributed in the hope that it will be useful, 124fee23f9Smrg// but WITHOUT ANY WARRANTY; without even the implied warranty of 134fee23f9Smrg// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 144fee23f9Smrg// GNU General Public License for more details. 154fee23f9Smrg 164fee23f9Smrg// Under Section 7 of GPL version 3, you are granted additional 174fee23f9Smrg// permissions described in the GCC Runtime Library Exception, version 184fee23f9Smrg// 3.1, as published by the Free Software Foundation. 194fee23f9Smrg 204fee23f9Smrg// You should have received a copy of the GNU General Public License and 214fee23f9Smrg// a copy of the GCC Runtime Library Exception along with this program; 224fee23f9Smrg// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 234fee23f9Smrg// <http://www.gnu.org/licenses/>. 244fee23f9Smrg 2548fb7bfaSmrg/** @file include/limits 264fee23f9Smrg * This is a Standard C++ Library header. 274fee23f9Smrg */ 284fee23f9Smrg 294fee23f9Smrg// Note: this is not a conforming implementation. 304fee23f9Smrg// Written by Gabriel Dos Reis <gdr@codesourcery.com> 314fee23f9Smrg 324fee23f9Smrg// 334fee23f9Smrg// ISO 14882:1998 344fee23f9Smrg// 18.2.1 354fee23f9Smrg// 364fee23f9Smrg 374fee23f9Smrg#ifndef _GLIBCXX_NUMERIC_LIMITS 384fee23f9Smrg#define _GLIBCXX_NUMERIC_LIMITS 1 394fee23f9Smrg 404fee23f9Smrg#pragma GCC system_header 414fee23f9Smrg 424fee23f9Smrg#include <bits/c++config.h> 434fee23f9Smrg 444fee23f9Smrg// 454fee23f9Smrg// The numeric_limits<> traits document implementation-defined aspects 464fee23f9Smrg// of fundamental arithmetic data types (integers and floating points). 474fee23f9Smrg// From Standard C++ point of view, there are 14 such types: 484fee23f9Smrg// * integers 494fee23f9Smrg// bool (1) 504fee23f9Smrg// char, signed char, unsigned char, wchar_t (4) 514fee23f9Smrg// short, unsigned short (2) 524fee23f9Smrg// int, unsigned (2) 534fee23f9Smrg// long, unsigned long (2) 544fee23f9Smrg// 554fee23f9Smrg// * floating points 564fee23f9Smrg// float (1) 574fee23f9Smrg// double (1) 584fee23f9Smrg// long double (1) 594fee23f9Smrg// 604fee23f9Smrg// GNU C++ understands (where supported by the host C-library) 614fee23f9Smrg// * integer 624fee23f9Smrg// long long, unsigned long long (2) 634fee23f9Smrg// 644fee23f9Smrg// which brings us to 16 fundamental arithmetic data types in GNU C++. 654fee23f9Smrg// 664fee23f9Smrg// 674fee23f9Smrg// Since a numeric_limits<> is a bit tricky to get right, we rely on 684fee23f9Smrg// an interface composed of macros which should be defined in config/os 694fee23f9Smrg// or config/cpu when they differ from the generic (read arbitrary) 704fee23f9Smrg// definitions given here. 714fee23f9Smrg// 724fee23f9Smrg 734fee23f9Smrg// These values can be overridden in the target configuration file. 744fee23f9Smrg// The default values are appropriate for many 32-bit targets. 754fee23f9Smrg 764fee23f9Smrg// GCC only intrinsically supports modulo integral types. The only remaining 774fee23f9Smrg// integral exceptional values is division by zero. Only targets that do not 784fee23f9Smrg// signal division by zero in some "hard to ignore" way should use false. 794fee23f9Smrg#ifndef __glibcxx_integral_traps 804fee23f9Smrg# define __glibcxx_integral_traps true 814fee23f9Smrg#endif 824fee23f9Smrg 834fee23f9Smrg// float 844fee23f9Smrg// 854fee23f9Smrg 864fee23f9Smrg// Default values. Should be overridden in configuration files if necessary. 874fee23f9Smrg 884fee23f9Smrg#ifndef __glibcxx_float_has_denorm_loss 894fee23f9Smrg# define __glibcxx_float_has_denorm_loss false 904fee23f9Smrg#endif 914fee23f9Smrg#ifndef __glibcxx_float_traps 924fee23f9Smrg# define __glibcxx_float_traps false 934fee23f9Smrg#endif 944fee23f9Smrg#ifndef __glibcxx_float_tinyness_before 954fee23f9Smrg# define __glibcxx_float_tinyness_before false 964fee23f9Smrg#endif 974fee23f9Smrg 984fee23f9Smrg// double 994fee23f9Smrg 1004fee23f9Smrg// Default values. Should be overridden in configuration files if necessary. 1014fee23f9Smrg 1024fee23f9Smrg#ifndef __glibcxx_double_has_denorm_loss 1034fee23f9Smrg# define __glibcxx_double_has_denorm_loss false 1044fee23f9Smrg#endif 1054fee23f9Smrg#ifndef __glibcxx_double_traps 1064fee23f9Smrg# define __glibcxx_double_traps false 1074fee23f9Smrg#endif 1084fee23f9Smrg#ifndef __glibcxx_double_tinyness_before 1094fee23f9Smrg# define __glibcxx_double_tinyness_before false 1104fee23f9Smrg#endif 1114fee23f9Smrg 1124fee23f9Smrg// long double 1134fee23f9Smrg 1144fee23f9Smrg// Default values. Should be overridden in configuration files if necessary. 1154fee23f9Smrg 1164fee23f9Smrg#ifndef __glibcxx_long_double_has_denorm_loss 1174fee23f9Smrg# define __glibcxx_long_double_has_denorm_loss false 1184fee23f9Smrg#endif 1194fee23f9Smrg#ifndef __glibcxx_long_double_traps 1204fee23f9Smrg# define __glibcxx_long_double_traps false 1214fee23f9Smrg#endif 1224fee23f9Smrg#ifndef __glibcxx_long_double_tinyness_before 1234fee23f9Smrg# define __glibcxx_long_double_tinyness_before false 1244fee23f9Smrg#endif 1254fee23f9Smrg 1264fee23f9Smrg// You should not need to define any macros below this point. 1274fee23f9Smrg 1284d5abbe8Smrg#define __glibcxx_signed_b(T,B) ((T)(-1) < 0) 1294fee23f9Smrg 1304d5abbe8Smrg#define __glibcxx_min_b(T,B) \ 1314d5abbe8Smrg (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0) 1324fee23f9Smrg 1334d5abbe8Smrg#define __glibcxx_max_b(T,B) \ 1344d5abbe8Smrg (__glibcxx_signed_b (T,B) ? \ 1354d5abbe8Smrg (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0) 1364fee23f9Smrg 1374d5abbe8Smrg#define __glibcxx_digits_b(T,B) \ 1384d5abbe8Smrg (B - __glibcxx_signed_b (T,B)) 1394fee23f9Smrg 1404fee23f9Smrg// The fraction 643/2136 approximates log10(2) to 7 significant digits. 1414d5abbe8Smrg#define __glibcxx_digits10_b(T,B) \ 1424d5abbe8Smrg (__glibcxx_digits_b (T,B) * 643L / 2136) 1434d5abbe8Smrg 1444d5abbe8Smrg#define __glibcxx_signed(T) \ 1454d5abbe8Smrg __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__) 1464d5abbe8Smrg#define __glibcxx_min(T) \ 1474d5abbe8Smrg __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__) 1484d5abbe8Smrg#define __glibcxx_max(T) \ 1494d5abbe8Smrg __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__) 1504d5abbe8Smrg#define __glibcxx_digits(T) \ 1514d5abbe8Smrg __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__) 1524fee23f9Smrg#define __glibcxx_digits10(T) \ 1534d5abbe8Smrg __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__) 1544fee23f9Smrg 1554fee23f9Smrg#define __glibcxx_max_digits10(T) \ 15648fb7bfaSmrg (2 + (T) * 643L / 2136) 1574fee23f9Smrg 15848fb7bfaSmrgnamespace std _GLIBCXX_VISIBILITY(default) 15948fb7bfaSmrg{ 16048fb7bfaSmrg_GLIBCXX_BEGIN_NAMESPACE_VERSION 1614fee23f9Smrg 1624fee23f9Smrg /** 1634fee23f9Smrg * @brief Describes the rounding style for floating-point types. 1644fee23f9Smrg * 1654fee23f9Smrg * This is used in the std::numeric_limits class. 1664fee23f9Smrg */ 1674fee23f9Smrg enum float_round_style 1684fee23f9Smrg { 16948fb7bfaSmrg round_indeterminate = -1, /// Intermediate. 17048fb7bfaSmrg round_toward_zero = 0, /// To zero. 17148fb7bfaSmrg round_to_nearest = 1, /// To the nearest representable value. 17248fb7bfaSmrg round_toward_infinity = 2, /// To infinity. 17348fb7bfaSmrg round_toward_neg_infinity = 3 /// To negative infinity. 1744fee23f9Smrg }; 1754fee23f9Smrg 1764fee23f9Smrg /** 1774fee23f9Smrg * @brief Describes the denormalization for floating-point types. 1784fee23f9Smrg * 1794fee23f9Smrg * These values represent the presence or absence of a variable number 1804fee23f9Smrg * of exponent bits. This type is used in the std::numeric_limits class. 1814fee23f9Smrg */ 1824fee23f9Smrg enum float_denorm_style 1834fee23f9Smrg { 1844fee23f9Smrg /// Indeterminate at compile time whether denormalized values are allowed. 1854fee23f9Smrg denorm_indeterminate = -1, 1864fee23f9Smrg /// The type does not allow denormalized values. 1874fee23f9Smrg denorm_absent = 0, 1884fee23f9Smrg /// The type allows denormalized values. 1894fee23f9Smrg denorm_present = 1 1904fee23f9Smrg }; 1914fee23f9Smrg 1924fee23f9Smrg /** 1934fee23f9Smrg * @brief Part of std::numeric_limits. 1944fee23f9Smrg * 1954fee23f9Smrg * The @c static @c const members are usable as integral constant 1964fee23f9Smrg * expressions. 1974fee23f9Smrg * 1984fee23f9Smrg * @note This is a separate class for purposes of efficiency; you 1994fee23f9Smrg * should only access these members as part of an instantiation 2004fee23f9Smrg * of the std::numeric_limits class. 2014fee23f9Smrg */ 2024fee23f9Smrg struct __numeric_limits_base 2034fee23f9Smrg { 2044fee23f9Smrg /** This will be true for all fundamental types (which have 2054fee23f9Smrg specializations), and false for everything else. */ 20648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false; 2074fee23f9Smrg 2084fee23f9Smrg /** The number of @c radix digits that be represented without change: for 2094fee23f9Smrg integer types, the number of non-sign bits in the mantissa; for 2104fee23f9Smrg floating types, the number of @c radix digits in the mantissa. */ 21148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = 0; 21248fb7bfaSmrg 2134fee23f9Smrg /** The number of base 10 digits that can be represented without change. */ 21448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 21548fb7bfaSmrg 21648fb7bfaSmrg#if __cplusplus >= 201103L 2174fee23f9Smrg /** The number of base 10 digits required to ensure that values which 2184fee23f9Smrg differ are always differentiated. */ 21948fb7bfaSmrg static constexpr int max_digits10 = 0; 2204fee23f9Smrg#endif 22148fb7bfaSmrg 2224fee23f9Smrg /** True if the type is signed. */ 22348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 22448fb7bfaSmrg 22548fb7bfaSmrg /** True if the type is integer. */ 22648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 22748fb7bfaSmrg 22848fb7bfaSmrg /** True if the type uses an exact representation. All integer types are 2294fee23f9Smrg exact, but not all exact types are integer. For example, rational and 23048fb7bfaSmrg fixed-exponent representations are exact but not integer. */ 23148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 23248fb7bfaSmrg 2334fee23f9Smrg /** For integer types, specifies the base of the representation. For 2344fee23f9Smrg floating types, specifies the base of the exponent representation. */ 23548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 0; 2364fee23f9Smrg 2374fee23f9Smrg /** The minimum negative integer such that @c radix raised to the power of 2384fee23f9Smrg (one less than that integer) is a normalized floating point number. */ 23948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 24048fb7bfaSmrg 2414fee23f9Smrg /** The minimum negative integer such that 10 raised to that power is in 2424fee23f9Smrg the range of normalized floating point numbers. */ 24348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 24448fb7bfaSmrg 2454fee23f9Smrg /** The maximum positive integer such that @c radix raised to the power of 2464fee23f9Smrg (one less than that integer) is a representable finite floating point 2474fee23f9Smrg number. */ 24848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 24948fb7bfaSmrg 2504fee23f9Smrg /** The maximum positive integer such that 10 raised to that power is in 2514fee23f9Smrg the range of representable finite floating point numbers. */ 25248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 2534fee23f9Smrg 2544fee23f9Smrg /** True if the type has a representation for positive infinity. */ 25548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 25648fb7bfaSmrg 2574fee23f9Smrg /** True if the type has a representation for a quiet (non-signaling) 25848fb7bfaSmrg Not a Number. */ 25948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 26048fb7bfaSmrg 2614fee23f9Smrg /** True if the type has a representation for a signaling 26248fb7bfaSmrg Not a Number. */ 26348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 26448fb7bfaSmrg 2654fee23f9Smrg /** See std::float_denorm_style for more information. */ 26648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent; 26748fb7bfaSmrg 26848fb7bfaSmrg /** True if loss of accuracy is detected as a denormalization loss, 26948fb7bfaSmrg rather than as an inexact result. */ 27048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 2714fee23f9Smrg 2724fee23f9Smrg /** True if-and-only-if the type adheres to the IEC 559 standard, also 2734fee23f9Smrg known as IEEE 754. (Only makes sense for floating point types.) */ 27448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 27548fb7bfaSmrg 27648fb7bfaSmrg /** True if the set of values representable by the type is 2774fee23f9Smrg finite. All built-in types are bounded, this member would be 27848fb7bfaSmrg false for arbitrary precision types. */ 27948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false; 28048fb7bfaSmrg 28148fb7bfaSmrg /** True if the type is @e modulo. A type is modulo if, for any 28248fb7bfaSmrg operation involving +, -, or * on values of that type whose 28348fb7bfaSmrg result would fall outside the range [min(),max()], the value 28448fb7bfaSmrg returned differs from the true value by an integer multiple of 28548fb7bfaSmrg max() - min() + 1. On most machines, this is false for floating 28648fb7bfaSmrg types, true for unsigned integers, and true for signed integers. 28748fb7bfaSmrg See PR22200 about signed integers. */ 28848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 2894fee23f9Smrg 2904fee23f9Smrg /** True if trapping is implemented for this type. */ 29148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = false; 29248fb7bfaSmrg 2934fee23f9Smrg /** True if tininess is detected before rounding. (see IEC 559) */ 29448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 29548fb7bfaSmrg 2964fee23f9Smrg /** See std::float_round_style for more information. This is only 2974fee23f9Smrg meaningful for floating types; integer types will all be 2984fee23f9Smrg round_toward_zero. */ 29948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 30048fb7bfaSmrg round_toward_zero; 3014fee23f9Smrg }; 3024fee23f9Smrg 3034fee23f9Smrg /** 3044fee23f9Smrg * @brief Properties of fundamental types. 3054fee23f9Smrg * 3064fee23f9Smrg * This class allows a program to obtain information about the 3074fee23f9Smrg * representation of a fundamental type on a given platform. For 3084fee23f9Smrg * non-fundamental types, the functions will return 0 and the data 3094fee23f9Smrg * members will all be @c false. 3104fee23f9Smrg */ 3114fee23f9Smrg template<typename _Tp> 3124fee23f9Smrg struct numeric_limits : public __numeric_limits_base 3134fee23f9Smrg { 3144fee23f9Smrg /** The minimum finite value, or for floating types with 3154fee23f9Smrg denormalization, the minimum positive normalized value. */ 31648fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 31748fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 31848fb7bfaSmrg 3194fee23f9Smrg /** The maximum finite value. */ 32048fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 32148fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 32248fb7bfaSmrg 32348fb7bfaSmrg#if __cplusplus >= 201103L 3244fee23f9Smrg /** A finite value x such that there is no other finite value y 3254fee23f9Smrg * where y < x. */ 32648fb7bfaSmrg static constexpr _Tp 32748fb7bfaSmrg lowest() noexcept { return _Tp(); } 3284fee23f9Smrg#endif 32948fb7bfaSmrg 3304fee23f9Smrg /** The @e machine @e epsilon: the difference between 1 and the least 3314fee23f9Smrg value greater than 1 that is representable. */ 33248fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 33348fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3344fee23f9Smrg 33548fb7bfaSmrg /** The maximum rounding error measurement (see LIA-1). */ 33648fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 33748fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 33848fb7bfaSmrg 33948fb7bfaSmrg /** The representation of positive infinity, if @c has_infinity. */ 34048fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 34148fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 34248fb7bfaSmrg 34348fb7bfaSmrg /** The representation of a quiet Not a Number, 3444fee23f9Smrg if @c has_quiet_NaN. */ 34548fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 34648fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 34748fb7bfaSmrg 34848fb7bfaSmrg /** The representation of a signaling Not a Number, if 3494fee23f9Smrg @c has_signaling_NaN. */ 35048fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 35148fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 35248fb7bfaSmrg 3534fee23f9Smrg /** The minimum positive denormalized value. For types where 3544fee23f9Smrg @c has_denorm is false, this is the minimum positive normalized 3554fee23f9Smrg value. */ 35648fb7bfaSmrg static _GLIBCXX_CONSTEXPR _Tp 35748fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3584fee23f9Smrg }; 3594fee23f9Smrg 360b17d1066Smrg // _GLIBCXX_RESOLVE_LIB_DEFECTS 361b17d1066Smrg // 559. numeric_limits<const T> 362b17d1066Smrg 3634fee23f9Smrg template<typename _Tp> 3644fee23f9Smrg struct numeric_limits<const _Tp> 3654fee23f9Smrg : public numeric_limits<_Tp> { }; 3664fee23f9Smrg 3674fee23f9Smrg template<typename _Tp> 3684fee23f9Smrg struct numeric_limits<volatile _Tp> 3694fee23f9Smrg : public numeric_limits<_Tp> { }; 3704fee23f9Smrg 3714fee23f9Smrg template<typename _Tp> 3724fee23f9Smrg struct numeric_limits<const volatile _Tp> 3734fee23f9Smrg : public numeric_limits<_Tp> { }; 3744fee23f9Smrg 3754fee23f9Smrg // Now there follow 16 explicit specializations. Yes, 16. Make sure 376b17d1066Smrg // you get the count right. (18 in C++11 mode, with char16_t and char32_t.) 377181254a7Smrg // (+1 if char8_t is enabled.) 378b17d1066Smrg 379b17d1066Smrg // _GLIBCXX_RESOLVE_LIB_DEFECTS 380b17d1066Smrg // 184. numeric_limits<bool> wording problems 3814fee23f9Smrg 3824fee23f9Smrg /// numeric_limits<bool> specialization. 3834fee23f9Smrg template<> 3844fee23f9Smrg struct numeric_limits<bool> 3854fee23f9Smrg { 38648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 3874fee23f9Smrg 38848fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 38948fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return false; } 39048fb7bfaSmrg 39148fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 39248fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return true; } 39348fb7bfaSmrg 39448fb7bfaSmrg#if __cplusplus >= 201103L 39548fb7bfaSmrg static constexpr bool 39648fb7bfaSmrg lowest() noexcept { return min(); } 3974fee23f9Smrg#endif 39848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = 1; 39948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 40048fb7bfaSmrg#if __cplusplus >= 201103L 40148fb7bfaSmrg static constexpr int max_digits10 = 0; 4024fee23f9Smrg#endif 40348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 40448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 40548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 40648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 4074fee23f9Smrg 40848fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 40948fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } 4104fee23f9Smrg 41148fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 41248fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return false; } 4134fee23f9Smrg 41448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 41548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 41648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 41748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 4184fee23f9Smrg 41948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 42048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 42148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 42248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 42348fb7bfaSmrg = denorm_absent; 42448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 42548fb7bfaSmrg 42648fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 42748fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return false; } 42848fb7bfaSmrg 42948fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 43048fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 43148fb7bfaSmrg 43248fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 43348fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 43448fb7bfaSmrg 43548fb7bfaSmrg static _GLIBCXX_CONSTEXPR bool 43648fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; } 43748fb7bfaSmrg 43848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 43948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 44048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 4414fee23f9Smrg 4424fee23f9Smrg // It is not clear what it means for a boolean type to trap. 4434fee23f9Smrg // This is a DR on the LWG issue list. Here, I use integer 4444fee23f9Smrg // promotion semantics. 44548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 44648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 44748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 44848fb7bfaSmrg = round_toward_zero; 4494fee23f9Smrg }; 4504fee23f9Smrg 4514fee23f9Smrg /// numeric_limits<char> specialization. 4524fee23f9Smrg template<> 4534fee23f9Smrg struct numeric_limits<char> 4544fee23f9Smrg { 45548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 4564fee23f9Smrg 45748fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 45848fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); } 45948fb7bfaSmrg 46048fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 46148fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); } 46248fb7bfaSmrg 46348fb7bfaSmrg#if __cplusplus >= 201103L 46448fb7bfaSmrg static constexpr char 46548fb7bfaSmrg lowest() noexcept { return min(); } 4664fee23f9Smrg#endif 4674fee23f9Smrg 46848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); 46948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); 47048fb7bfaSmrg#if __cplusplus >= 201103L 47148fb7bfaSmrg static constexpr int max_digits10 = 0; 4724fee23f9Smrg#endif 47348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); 47448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 47548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 47648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 4774fee23f9Smrg 47848fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 47948fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 4804fee23f9Smrg 48148fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 48248fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 4834fee23f9Smrg 48448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 48548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 48648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 48748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 4884fee23f9Smrg 48948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 49048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 49148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 49248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 49348fb7bfaSmrg = denorm_absent; 49448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 4954fee23f9Smrg 49648fb7bfaSmrg static _GLIBCXX_CONSTEXPR 49748fb7bfaSmrg char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); } 49848fb7bfaSmrg 49948fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 50048fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 50148fb7bfaSmrg 50248fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 50348fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 50448fb7bfaSmrg 50548fb7bfaSmrg static _GLIBCXX_CONSTEXPR char 50648fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); } 50748fb7bfaSmrg 50848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 50948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 51048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 51148fb7bfaSmrg 51248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 51348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 51448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 51548fb7bfaSmrg = round_toward_zero; 5164fee23f9Smrg }; 5174fee23f9Smrg 5184fee23f9Smrg /// numeric_limits<signed char> specialization. 5194fee23f9Smrg template<> 5204fee23f9Smrg struct numeric_limits<signed char> 5214fee23f9Smrg { 52248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 5234fee23f9Smrg 52448fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 52548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; } 52648fb7bfaSmrg 52748fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 52848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; } 52948fb7bfaSmrg 53048fb7bfaSmrg#if __cplusplus >= 201103L 53148fb7bfaSmrg static constexpr signed char 53248fb7bfaSmrg lowest() noexcept { return min(); } 5334fee23f9Smrg#endif 5344fee23f9Smrg 53548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); 53648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 53748fb7bfaSmrg = __glibcxx_digits10 (signed char); 53848fb7bfaSmrg#if __cplusplus >= 201103L 53948fb7bfaSmrg static constexpr int max_digits10 = 0; 5404fee23f9Smrg#endif 54148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 54248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 54348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 54448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 5454fee23f9Smrg 54648fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 54748fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 5484fee23f9Smrg 54948fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 55048fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 5514fee23f9Smrg 55248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 55348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 55448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 55548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 55648fb7bfaSmrg 55748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 55848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 55948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 56048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 56148fb7bfaSmrg = denorm_absent; 56248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 56348fb7bfaSmrg 56448fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 56548fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 56648fb7bfaSmrg 56748fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 56848fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 56948fb7bfaSmrg 57048fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 57148fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 5724fee23f9Smrg { return static_cast<signed char>(0); } 5734fee23f9Smrg 57448fb7bfaSmrg static _GLIBCXX_CONSTEXPR signed char 57548fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 57648fb7bfaSmrg { return static_cast<signed char>(0); } 5774fee23f9Smrg 57848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 57948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 58048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 58148fb7bfaSmrg 58248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 58348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 58448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 58548fb7bfaSmrg = round_toward_zero; 5864fee23f9Smrg }; 5874fee23f9Smrg 5884fee23f9Smrg /// numeric_limits<unsigned char> specialization. 5894fee23f9Smrg template<> 5904fee23f9Smrg struct numeric_limits<unsigned char> 5914fee23f9Smrg { 59248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 5934fee23f9Smrg 59448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 59548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 59648fb7bfaSmrg 59748fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 59848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; } 59948fb7bfaSmrg 60048fb7bfaSmrg#if __cplusplus >= 201103L 60148fb7bfaSmrg static constexpr unsigned char 60248fb7bfaSmrg lowest() noexcept { return min(); } 6034fee23f9Smrg#endif 6044fee23f9Smrg 60548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 60648fb7bfaSmrg = __glibcxx_digits (unsigned char); 60748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 60848fb7bfaSmrg = __glibcxx_digits10 (unsigned char); 60948fb7bfaSmrg#if __cplusplus >= 201103L 61048fb7bfaSmrg static constexpr int max_digits10 = 0; 6114fee23f9Smrg#endif 61248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 61348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 61448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 61548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 6164fee23f9Smrg 61748fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 61848fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 6194fee23f9Smrg 62048fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 62148fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 6224fee23f9Smrg 62348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 62448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 62548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 62648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 62748fb7bfaSmrg 62848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 62948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 63048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 63148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 63248fb7bfaSmrg = denorm_absent; 63348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 63448fb7bfaSmrg 63548fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 63648fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT 6374fee23f9Smrg { return static_cast<unsigned char>(0); } 6384fee23f9Smrg 63948fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 64048fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 64148fb7bfaSmrg { return static_cast<unsigned char>(0); } 6424fee23f9Smrg 64348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 64448fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 64548fb7bfaSmrg { return static_cast<unsigned char>(0); } 64648fb7bfaSmrg 64748fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned char 64848fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 64948fb7bfaSmrg { return static_cast<unsigned char>(0); } 65048fb7bfaSmrg 65148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 65248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 65348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 65448fb7bfaSmrg 65548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 65648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 65748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 65848fb7bfaSmrg = round_toward_zero; 6594fee23f9Smrg }; 6604fee23f9Smrg 6614fee23f9Smrg /// numeric_limits<wchar_t> specialization. 6624fee23f9Smrg template<> 6634fee23f9Smrg struct numeric_limits<wchar_t> 6644fee23f9Smrg { 66548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 6664fee23f9Smrg 66748fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 66848fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); } 66948fb7bfaSmrg 67048fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 67148fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); } 67248fb7bfaSmrg 67348fb7bfaSmrg#if __cplusplus >= 201103L 67448fb7bfaSmrg static constexpr wchar_t 67548fb7bfaSmrg lowest() noexcept { return min(); } 6764fee23f9Smrg#endif 6774fee23f9Smrg 67848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); 67948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 68048fb7bfaSmrg = __glibcxx_digits10 (wchar_t); 68148fb7bfaSmrg#if __cplusplus >= 201103L 68248fb7bfaSmrg static constexpr int max_digits10 = 0; 6834fee23f9Smrg#endif 68448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); 68548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 68648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 68748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 6884fee23f9Smrg 68948fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 69048fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 6914fee23f9Smrg 69248fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 69348fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 6944fee23f9Smrg 69548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 69648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 69748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 69848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 6994fee23f9Smrg 70048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 70148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 70248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 70348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 70448fb7bfaSmrg = denorm_absent; 70548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 7064fee23f9Smrg 70748fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 70848fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 70948fb7bfaSmrg 71048fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 71148fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 71248fb7bfaSmrg 71348fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 71448fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 71548fb7bfaSmrg 71648fb7bfaSmrg static _GLIBCXX_CONSTEXPR wchar_t 71748fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 71848fb7bfaSmrg 71948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 72048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 72148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 72248fb7bfaSmrg 72348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 72448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 72548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 72648fb7bfaSmrg = round_toward_zero; 7274fee23f9Smrg }; 7284fee23f9Smrg 729181254a7Smrg#if _GLIBCXX_USE_CHAR8_T 730181254a7Smrg /// numeric_limits<char8_t> specialization. 731181254a7Smrg template<> 732181254a7Smrg struct numeric_limits<char8_t> 733181254a7Smrg { 734181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 735181254a7Smrg 736181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 737181254a7Smrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); } 738181254a7Smrg 739181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 740181254a7Smrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); } 741181254a7Smrg 742181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 743181254a7Smrg lowest() _GLIBCXX_USE_NOEXCEPT { return min(); } 744181254a7Smrg 745181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t); 746181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t); 747181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0; 748181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t); 749181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 750181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 751181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 752181254a7Smrg 753181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 754181254a7Smrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 755181254a7Smrg 756181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 757181254a7Smrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 758181254a7Smrg 759181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 760181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 761181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 762181254a7Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 763181254a7Smrg 764181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 765181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 766181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 767181254a7Smrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 768181254a7Smrg = denorm_absent; 769181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 770181254a7Smrg 771181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 772181254a7Smrg infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 773181254a7Smrg 774181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 775181254a7Smrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 776181254a7Smrg 777181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 778181254a7Smrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 779181254a7Smrg 780181254a7Smrg static _GLIBCXX_CONSTEXPR char8_t 781181254a7Smrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 782181254a7Smrg 783181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 784181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 785181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 786181254a7Smrg 787181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 788181254a7Smrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 789181254a7Smrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 790181254a7Smrg = round_toward_zero; 791181254a7Smrg }; 792181254a7Smrg#endif 793181254a7Smrg 79448fb7bfaSmrg#if __cplusplus >= 201103L 7954fee23f9Smrg /// numeric_limits<char16_t> specialization. 7964fee23f9Smrg template<> 7974fee23f9Smrg struct numeric_limits<char16_t> 7984fee23f9Smrg { 79948fb7bfaSmrg static constexpr bool is_specialized = true; 8004fee23f9Smrg 80148fb7bfaSmrg static constexpr char16_t 80248fb7bfaSmrg min() noexcept { return __glibcxx_min (char16_t); } 8034fee23f9Smrg 80448fb7bfaSmrg static constexpr char16_t 80548fb7bfaSmrg max() noexcept { return __glibcxx_max (char16_t); } 8064fee23f9Smrg 80748fb7bfaSmrg static constexpr char16_t 80848fb7bfaSmrg lowest() noexcept { return min(); } 8094fee23f9Smrg 81048fb7bfaSmrg static constexpr int digits = __glibcxx_digits (char16_t); 81148fb7bfaSmrg static constexpr int digits10 = __glibcxx_digits10 (char16_t); 81248fb7bfaSmrg static constexpr int max_digits10 = 0; 81348fb7bfaSmrg static constexpr bool is_signed = __glibcxx_signed (char16_t); 81448fb7bfaSmrg static constexpr bool is_integer = true; 81548fb7bfaSmrg static constexpr bool is_exact = true; 81648fb7bfaSmrg static constexpr int radix = 2; 8174fee23f9Smrg 81848fb7bfaSmrg static constexpr char16_t 81948fb7bfaSmrg epsilon() noexcept { return 0; } 8204fee23f9Smrg 82148fb7bfaSmrg static constexpr char16_t 82248fb7bfaSmrg round_error() noexcept { return 0; } 8234fee23f9Smrg 82448fb7bfaSmrg static constexpr int min_exponent = 0; 82548fb7bfaSmrg static constexpr int min_exponent10 = 0; 82648fb7bfaSmrg static constexpr int max_exponent = 0; 82748fb7bfaSmrg static constexpr int max_exponent10 = 0; 82848fb7bfaSmrg 82948fb7bfaSmrg static constexpr bool has_infinity = false; 83048fb7bfaSmrg static constexpr bool has_quiet_NaN = false; 83148fb7bfaSmrg static constexpr bool has_signaling_NaN = false; 83248fb7bfaSmrg static constexpr float_denorm_style has_denorm = denorm_absent; 83348fb7bfaSmrg static constexpr bool has_denorm_loss = false; 83448fb7bfaSmrg 83548fb7bfaSmrg static constexpr char16_t 83648fb7bfaSmrg infinity() noexcept { return char16_t(); } 83748fb7bfaSmrg 83848fb7bfaSmrg static constexpr char16_t 83948fb7bfaSmrg quiet_NaN() noexcept { return char16_t(); } 84048fb7bfaSmrg 84148fb7bfaSmrg static constexpr char16_t 84248fb7bfaSmrg signaling_NaN() noexcept { return char16_t(); } 84348fb7bfaSmrg 84448fb7bfaSmrg static constexpr char16_t 84548fb7bfaSmrg denorm_min() noexcept { return char16_t(); } 84648fb7bfaSmrg 84748fb7bfaSmrg static constexpr bool is_iec559 = false; 84848fb7bfaSmrg static constexpr bool is_bounded = true; 84948fb7bfaSmrg static constexpr bool is_modulo = !is_signed; 85048fb7bfaSmrg 85148fb7bfaSmrg static constexpr bool traps = __glibcxx_integral_traps; 85248fb7bfaSmrg static constexpr bool tinyness_before = false; 85348fb7bfaSmrg static constexpr float_round_style round_style = round_toward_zero; 8544fee23f9Smrg }; 8554fee23f9Smrg 8564fee23f9Smrg /// numeric_limits<char32_t> specialization. 8574fee23f9Smrg template<> 8584fee23f9Smrg struct numeric_limits<char32_t> 8594fee23f9Smrg { 86048fb7bfaSmrg static constexpr bool is_specialized = true; 8614fee23f9Smrg 86248fb7bfaSmrg static constexpr char32_t 86348fb7bfaSmrg min() noexcept { return __glibcxx_min (char32_t); } 8644fee23f9Smrg 86548fb7bfaSmrg static constexpr char32_t 86648fb7bfaSmrg max() noexcept { return __glibcxx_max (char32_t); } 8674fee23f9Smrg 86848fb7bfaSmrg static constexpr char32_t 86948fb7bfaSmrg lowest() noexcept { return min(); } 8704fee23f9Smrg 87148fb7bfaSmrg static constexpr int digits = __glibcxx_digits (char32_t); 87248fb7bfaSmrg static constexpr int digits10 = __glibcxx_digits10 (char32_t); 87348fb7bfaSmrg static constexpr int max_digits10 = 0; 87448fb7bfaSmrg static constexpr bool is_signed = __glibcxx_signed (char32_t); 87548fb7bfaSmrg static constexpr bool is_integer = true; 87648fb7bfaSmrg static constexpr bool is_exact = true; 87748fb7bfaSmrg static constexpr int radix = 2; 8784fee23f9Smrg 87948fb7bfaSmrg static constexpr char32_t 88048fb7bfaSmrg epsilon() noexcept { return 0; } 8814fee23f9Smrg 88248fb7bfaSmrg static constexpr char32_t 88348fb7bfaSmrg round_error() noexcept { return 0; } 8844fee23f9Smrg 88548fb7bfaSmrg static constexpr int min_exponent = 0; 88648fb7bfaSmrg static constexpr int min_exponent10 = 0; 88748fb7bfaSmrg static constexpr int max_exponent = 0; 88848fb7bfaSmrg static constexpr int max_exponent10 = 0; 88948fb7bfaSmrg 89048fb7bfaSmrg static constexpr bool has_infinity = false; 89148fb7bfaSmrg static constexpr bool has_quiet_NaN = false; 89248fb7bfaSmrg static constexpr bool has_signaling_NaN = false; 89348fb7bfaSmrg static constexpr float_denorm_style has_denorm = denorm_absent; 89448fb7bfaSmrg static constexpr bool has_denorm_loss = false; 89548fb7bfaSmrg 89648fb7bfaSmrg static constexpr char32_t 89748fb7bfaSmrg infinity() noexcept { return char32_t(); } 89848fb7bfaSmrg 89948fb7bfaSmrg static constexpr char32_t 90048fb7bfaSmrg quiet_NaN() noexcept { return char32_t(); } 90148fb7bfaSmrg 90248fb7bfaSmrg static constexpr char32_t 90348fb7bfaSmrg signaling_NaN() noexcept { return char32_t(); } 90448fb7bfaSmrg 90548fb7bfaSmrg static constexpr char32_t 90648fb7bfaSmrg denorm_min() noexcept { return char32_t(); } 90748fb7bfaSmrg 90848fb7bfaSmrg static constexpr bool is_iec559 = false; 90948fb7bfaSmrg static constexpr bool is_bounded = true; 91048fb7bfaSmrg static constexpr bool is_modulo = !is_signed; 91148fb7bfaSmrg 91248fb7bfaSmrg static constexpr bool traps = __glibcxx_integral_traps; 91348fb7bfaSmrg static constexpr bool tinyness_before = false; 91448fb7bfaSmrg static constexpr float_round_style round_style = round_toward_zero; 9154fee23f9Smrg }; 9164fee23f9Smrg#endif 9174fee23f9Smrg 9184fee23f9Smrg /// numeric_limits<short> specialization. 9194fee23f9Smrg template<> 9204fee23f9Smrg struct numeric_limits<short> 9214fee23f9Smrg { 92248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 9234fee23f9Smrg 92448fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 92548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; } 92648fb7bfaSmrg 92748fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 92848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; } 92948fb7bfaSmrg 93048fb7bfaSmrg#if __cplusplus >= 201103L 93148fb7bfaSmrg static constexpr short 93248fb7bfaSmrg lowest() noexcept { return min(); } 9334fee23f9Smrg#endif 9344fee23f9Smrg 93548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); 93648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); 93748fb7bfaSmrg#if __cplusplus >= 201103L 93848fb7bfaSmrg static constexpr int max_digits10 = 0; 9394fee23f9Smrg#endif 94048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 94148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 94248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 94348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 9444fee23f9Smrg 94548fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 94648fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 9474fee23f9Smrg 94848fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 94948fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 9504fee23f9Smrg 95148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 95248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 95348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 95448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 9554fee23f9Smrg 95648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 95748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 95848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 95948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 96048fb7bfaSmrg = denorm_absent; 96148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 9624fee23f9Smrg 96348fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 96448fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return short(); } 96548fb7bfaSmrg 96648fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 96748fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 96848fb7bfaSmrg 96948fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 97048fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 97148fb7bfaSmrg 97248fb7bfaSmrg static _GLIBCXX_CONSTEXPR short 97348fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); } 97448fb7bfaSmrg 97548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 97648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 97748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 97848fb7bfaSmrg 97948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 98048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 98148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 98248fb7bfaSmrg = round_toward_zero; 9834fee23f9Smrg }; 9844fee23f9Smrg 9854fee23f9Smrg /// numeric_limits<unsigned short> specialization. 9864fee23f9Smrg template<> 9874fee23f9Smrg struct numeric_limits<unsigned short> 9884fee23f9Smrg { 98948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 9904fee23f9Smrg 99148fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 99248fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 99348fb7bfaSmrg 99448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 99548fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; } 99648fb7bfaSmrg 99748fb7bfaSmrg#if __cplusplus >= 201103L 99848fb7bfaSmrg static constexpr unsigned short 99948fb7bfaSmrg lowest() noexcept { return min(); } 10004fee23f9Smrg#endif 10014fee23f9Smrg 100248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 100348fb7bfaSmrg = __glibcxx_digits (unsigned short); 100448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 100548fb7bfaSmrg = __glibcxx_digits10 (unsigned short); 100648fb7bfaSmrg#if __cplusplus >= 201103L 100748fb7bfaSmrg static constexpr int max_digits10 = 0; 10084fee23f9Smrg#endif 100948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 101048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 101148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 101248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 10134fee23f9Smrg 101448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 101548fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 10164fee23f9Smrg 101748fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 101848fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 10194fee23f9Smrg 102048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 102148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 102248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 102348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 102448fb7bfaSmrg 102548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 102648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 102748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 102848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 102948fb7bfaSmrg = denorm_absent; 103048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 103148fb7bfaSmrg 103248fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 103348fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT 10344fee23f9Smrg { return static_cast<unsigned short>(0); } 10354fee23f9Smrg 103648fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 103748fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 103848fb7bfaSmrg { return static_cast<unsigned short>(0); } 10394fee23f9Smrg 104048fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 104148fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 104248fb7bfaSmrg { return static_cast<unsigned short>(0); } 104348fb7bfaSmrg 104448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned short 104548fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 104648fb7bfaSmrg { return static_cast<unsigned short>(0); } 104748fb7bfaSmrg 104848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 104948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 105048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 105148fb7bfaSmrg 105248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 105348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 105448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 105548fb7bfaSmrg = round_toward_zero; 10564fee23f9Smrg }; 10574fee23f9Smrg 10584fee23f9Smrg /// numeric_limits<int> specialization. 10594fee23f9Smrg template<> 10604fee23f9Smrg struct numeric_limits<int> 10614fee23f9Smrg { 106248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 10634fee23f9Smrg 106448fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 106548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; } 106648fb7bfaSmrg 106748fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 106848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; } 106948fb7bfaSmrg 107048fb7bfaSmrg#if __cplusplus >= 201103L 107148fb7bfaSmrg static constexpr int 107248fb7bfaSmrg lowest() noexcept { return min(); } 10734fee23f9Smrg#endif 10744fee23f9Smrg 107548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); 107648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); 107748fb7bfaSmrg#if __cplusplus >= 201103L 107848fb7bfaSmrg static constexpr int max_digits10 = 0; 10794fee23f9Smrg#endif 108048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 108148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 108248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 108348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 10844fee23f9Smrg 108548fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 108648fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 10874fee23f9Smrg 108848fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 108948fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 10904fee23f9Smrg 109148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 109248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 109348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 109448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 10954fee23f9Smrg 109648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 109748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 109848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 109948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 110048fb7bfaSmrg = denorm_absent; 110148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 11024fee23f9Smrg 110348fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 110448fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 110548fb7bfaSmrg 110648fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 110748fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 110848fb7bfaSmrg 110948fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 111048fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 111148fb7bfaSmrg 111248fb7bfaSmrg static _GLIBCXX_CONSTEXPR int 111348fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 111448fb7bfaSmrg 111548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 111648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 111748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 111848fb7bfaSmrg 111948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 112048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 112148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 112248fb7bfaSmrg = round_toward_zero; 11234fee23f9Smrg }; 11244fee23f9Smrg 11254fee23f9Smrg /// numeric_limits<unsigned int> specialization. 11264fee23f9Smrg template<> 11274fee23f9Smrg struct numeric_limits<unsigned int> 11284fee23f9Smrg { 112948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 11304fee23f9Smrg 113148fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 113248fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 113348fb7bfaSmrg 113448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 113548fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; } 113648fb7bfaSmrg 113748fb7bfaSmrg#if __cplusplus >= 201103L 113848fb7bfaSmrg static constexpr unsigned int 113948fb7bfaSmrg lowest() noexcept { return min(); } 11404fee23f9Smrg#endif 11414fee23f9Smrg 114248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 114348fb7bfaSmrg = __glibcxx_digits (unsigned int); 114448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 114548fb7bfaSmrg = __glibcxx_digits10 (unsigned int); 114648fb7bfaSmrg#if __cplusplus >= 201103L 114748fb7bfaSmrg static constexpr int max_digits10 = 0; 11484fee23f9Smrg#endif 114948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 115048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 115148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 115248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 11534fee23f9Smrg 115448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 115548fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 11564fee23f9Smrg 115748fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 115848fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 11594fee23f9Smrg 116048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 116148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 116248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 116348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 116448fb7bfaSmrg 116548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 116648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 116748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 116848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 116948fb7bfaSmrg = denorm_absent; 117048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 117148fb7bfaSmrg 117248fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 117348fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); } 117448fb7bfaSmrg 117548fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 117648fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 11774fee23f9Smrg { return static_cast<unsigned int>(0); } 11784fee23f9Smrg 117948fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 118048fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 118148fb7bfaSmrg { return static_cast<unsigned int>(0); } 11824fee23f9Smrg 118348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned int 118448fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 118548fb7bfaSmrg { return static_cast<unsigned int>(0); } 118648fb7bfaSmrg 118748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 118848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 118948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 119048fb7bfaSmrg 119148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 119248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 119348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 119448fb7bfaSmrg = round_toward_zero; 11954fee23f9Smrg }; 11964fee23f9Smrg 11974fee23f9Smrg /// numeric_limits<long> specialization. 11984fee23f9Smrg template<> 11994fee23f9Smrg struct numeric_limits<long> 12004fee23f9Smrg { 120148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 12024fee23f9Smrg 120348fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 120448fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; } 120548fb7bfaSmrg 120648fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 120748fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; } 120848fb7bfaSmrg 120948fb7bfaSmrg#if __cplusplus >= 201103L 121048fb7bfaSmrg static constexpr long 121148fb7bfaSmrg lowest() noexcept { return min(); } 12124fee23f9Smrg#endif 12134fee23f9Smrg 121448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); 121548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); 121648fb7bfaSmrg#if __cplusplus >= 201103L 121748fb7bfaSmrg static constexpr int max_digits10 = 0; 12184fee23f9Smrg#endif 121948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 122048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 122148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 122248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 12234fee23f9Smrg 122448fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 122548fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 12264fee23f9Smrg 122748fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 122848fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 12294fee23f9Smrg 123048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 123148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 123248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 123348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 12344fee23f9Smrg 123548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 123648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 123748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 123848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 123948fb7bfaSmrg = denorm_absent; 124048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 12414fee23f9Smrg 124248fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 124348fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 124448fb7bfaSmrg 124548fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 124648fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 124748fb7bfaSmrg 124848fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 124948fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 125048fb7bfaSmrg 125148fb7bfaSmrg static _GLIBCXX_CONSTEXPR long 125248fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 125348fb7bfaSmrg 125448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 125548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 125648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 125748fb7bfaSmrg 125848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 125948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 126048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 126148fb7bfaSmrg = round_toward_zero; 12624fee23f9Smrg }; 12634fee23f9Smrg 12644fee23f9Smrg /// numeric_limits<unsigned long> specialization. 12654fee23f9Smrg template<> 12664fee23f9Smrg struct numeric_limits<unsigned long> 12674fee23f9Smrg { 126848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 12694fee23f9Smrg 127048fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 127148fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 127248fb7bfaSmrg 127348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 127448fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; } 127548fb7bfaSmrg 127648fb7bfaSmrg#if __cplusplus >= 201103L 127748fb7bfaSmrg static constexpr unsigned long 127848fb7bfaSmrg lowest() noexcept { return min(); } 12794fee23f9Smrg#endif 12804fee23f9Smrg 128148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 128248fb7bfaSmrg = __glibcxx_digits (unsigned long); 128348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 128448fb7bfaSmrg = __glibcxx_digits10 (unsigned long); 128548fb7bfaSmrg#if __cplusplus >= 201103L 128648fb7bfaSmrg static constexpr int max_digits10 = 0; 12874fee23f9Smrg#endif 128848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 128948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 129048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 129148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 12924fee23f9Smrg 129348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 129448fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 12954fee23f9Smrg 129648fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 129748fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 12984fee23f9Smrg 129948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 130048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 130148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 130248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 130348fb7bfaSmrg 130448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 130548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 130648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 130748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 130848fb7bfaSmrg = denorm_absent; 130948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 131048fb7bfaSmrg 131148fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 131248fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT 13134fee23f9Smrg { return static_cast<unsigned long>(0); } 13144fee23f9Smrg 131548fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 131648fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 131748fb7bfaSmrg { return static_cast<unsigned long>(0); } 13184fee23f9Smrg 131948fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 132048fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 132148fb7bfaSmrg { return static_cast<unsigned long>(0); } 132248fb7bfaSmrg 132348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long 132448fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 132548fb7bfaSmrg { return static_cast<unsigned long>(0); } 132648fb7bfaSmrg 132748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 132848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 132948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 133048fb7bfaSmrg 133148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 133248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 133348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 133448fb7bfaSmrg = round_toward_zero; 13354fee23f9Smrg }; 13364fee23f9Smrg 13374fee23f9Smrg /// numeric_limits<long long> specialization. 13384fee23f9Smrg template<> 13394fee23f9Smrg struct numeric_limits<long long> 13404fee23f9Smrg { 134148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 13424fee23f9Smrg 134348fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 134448fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; } 134548fb7bfaSmrg 134648fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 134748fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; } 134848fb7bfaSmrg 134948fb7bfaSmrg#if __cplusplus >= 201103L 135048fb7bfaSmrg static constexpr long long 135148fb7bfaSmrg lowest() noexcept { return min(); } 13524fee23f9Smrg#endif 13534fee23f9Smrg 135448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 135548fb7bfaSmrg = __glibcxx_digits (long long); 135648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 135748fb7bfaSmrg = __glibcxx_digits10 (long long); 135848fb7bfaSmrg#if __cplusplus >= 201103L 135948fb7bfaSmrg static constexpr int max_digits10 = 0; 13604fee23f9Smrg#endif 136148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 136248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 136348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 136448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 13654fee23f9Smrg 136648fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 136748fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 13684fee23f9Smrg 136948fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 137048fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 13714fee23f9Smrg 137248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 137348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 137448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 137548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 137648fb7bfaSmrg 137748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 137848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 137948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 138048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 138148fb7bfaSmrg = denorm_absent; 138248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 138348fb7bfaSmrg 138448fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 138548fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 138648fb7bfaSmrg 138748fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 138848fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 138948fb7bfaSmrg 139048fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 139148fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 13924fee23f9Smrg { return static_cast<long long>(0); } 13934fee23f9Smrg 139448fb7bfaSmrg static _GLIBCXX_CONSTEXPR long long 139548fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 13964fee23f9Smrg 139748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 139848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 139948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 140048fb7bfaSmrg 140148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 140248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 140348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 140448fb7bfaSmrg = round_toward_zero; 14054fee23f9Smrg }; 14064fee23f9Smrg 14074fee23f9Smrg /// numeric_limits<unsigned long long> specialization. 14084fee23f9Smrg template<> 14094fee23f9Smrg struct numeric_limits<unsigned long long> 14104fee23f9Smrg { 141148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 14124fee23f9Smrg 141348fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 141448fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 141548fb7bfaSmrg 141648fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 141748fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; } 141848fb7bfaSmrg 141948fb7bfaSmrg#if __cplusplus >= 201103L 142048fb7bfaSmrg static constexpr unsigned long long 142148fb7bfaSmrg lowest() noexcept { return min(); } 14224fee23f9Smrg#endif 14234fee23f9Smrg 142448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits 142548fb7bfaSmrg = __glibcxx_digits (unsigned long long); 142648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 142748fb7bfaSmrg = __glibcxx_digits10 (unsigned long long); 142848fb7bfaSmrg#if __cplusplus >= 201103L 142948fb7bfaSmrg static constexpr int max_digits10 = 0; 14304fee23f9Smrg#endif 143148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 143248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 143348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 143448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 14354fee23f9Smrg 143648fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 143748fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 14384fee23f9Smrg 143948fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 144048fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 14414fee23f9Smrg 144248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 144348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 144448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 144548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 144648fb7bfaSmrg 144748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 144848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 144948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 145048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 145148fb7bfaSmrg = denorm_absent; 145248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 145348fb7bfaSmrg 145448fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 145548fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT 14564fee23f9Smrg { return static_cast<unsigned long long>(0); } 14574fee23f9Smrg 145848fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 145948fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 146048fb7bfaSmrg { return static_cast<unsigned long long>(0); } 14614fee23f9Smrg 146248fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 146348fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 146448fb7bfaSmrg { return static_cast<unsigned long long>(0); } 146548fb7bfaSmrg 146648fb7bfaSmrg static _GLIBCXX_CONSTEXPR unsigned long long 146748fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 146848fb7bfaSmrg { return static_cast<unsigned long long>(0); } 146948fb7bfaSmrg 147048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 147148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 147248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 147348fb7bfaSmrg 147448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 147548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 147648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 147748fb7bfaSmrg = round_toward_zero; 14784fee23f9Smrg }; 14794fee23f9Smrg 14804d5abbe8Smrg#define __INT_N(TYPE, BITSIZE, EXT, UEXT) \ 1481*b1e83836Smrg __extension__ \ 14824d5abbe8Smrg template<> \ 14834d5abbe8Smrg struct numeric_limits<TYPE> \ 14844d5abbe8Smrg { \ 14854d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ 14864d5abbe8Smrg \ 14874d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 14884d5abbe8Smrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \ 14894d5abbe8Smrg \ 14904d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 14914d5abbe8Smrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \ 14924d5abbe8Smrg \ 14934d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int digits \ 14944d5abbe8Smrg = BITSIZE - 1; \ 14954d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int digits10 \ 14964d5abbe8Smrg = (BITSIZE - 1) * 643L / 2136; \ 14974d5abbe8Smrg \ 14984d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; \ 14994d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ 15004d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ 15014d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ 15024d5abbe8Smrg \ 15034d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15044d5abbe8Smrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15054d5abbe8Smrg \ 15064d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15074d5abbe8Smrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15084d5abbe8Smrg \ 15094d5abbe8Smrg EXT \ 15104d5abbe8Smrg \ 15114d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ 15124d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ 15134d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ 15144d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ 15154d5abbe8Smrg \ 15164d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ 15174d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ 15184d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ 15194d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ 15204d5abbe8Smrg = denorm_absent; \ 15214d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ 15224d5abbe8Smrg \ 15234d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15244d5abbe8Smrg infinity() _GLIBCXX_USE_NOEXCEPT \ 15254d5abbe8Smrg { return static_cast<TYPE>(0); } \ 15264d5abbe8Smrg \ 15274d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15284d5abbe8Smrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ 15294d5abbe8Smrg { return static_cast<TYPE>(0); } \ 15304d5abbe8Smrg \ 15314d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15324d5abbe8Smrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ 15334d5abbe8Smrg { return static_cast<TYPE>(0); } \ 15344d5abbe8Smrg \ 15354d5abbe8Smrg static _GLIBCXX_CONSTEXPR TYPE \ 15364d5abbe8Smrg denorm_min() _GLIBCXX_USE_NOEXCEPT \ 15374d5abbe8Smrg { return static_cast<TYPE>(0); } \ 15384d5abbe8Smrg \ 15394d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ 15404d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ 15414d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \ 15424d5abbe8Smrg \ 15434d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool traps \ 15444d5abbe8Smrg = __glibcxx_integral_traps; \ 15454d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ 15464d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ 15474d5abbe8Smrg = round_toward_zero; \ 15484d5abbe8Smrg }; \ 15494d5abbe8Smrg \ 1550*b1e83836Smrg __extension__ \ 15514d5abbe8Smrg template<> \ 15524d5abbe8Smrg struct numeric_limits<unsigned TYPE> \ 15534d5abbe8Smrg { \ 15544d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ 15554d5abbe8Smrg \ 15564d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15574d5abbe8Smrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15584d5abbe8Smrg \ 15594d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15604d5abbe8Smrg max() _GLIBCXX_USE_NOEXCEPT \ 15614d5abbe8Smrg { return __glibcxx_max_b (unsigned TYPE, BITSIZE); } \ 15624d5abbe8Smrg \ 15634d5abbe8Smrg UEXT \ 15644d5abbe8Smrg \ 15654d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int digits \ 15664d5abbe8Smrg = BITSIZE; \ 15674d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int digits10 \ 15684d5abbe8Smrg = BITSIZE * 643L / 2136; \ 15694d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; \ 15704d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ 15714d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ 15724d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ 15734d5abbe8Smrg \ 15744d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15754d5abbe8Smrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15764d5abbe8Smrg \ 15774d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15784d5abbe8Smrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15794d5abbe8Smrg \ 15804d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ 15814d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ 15824d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ 15834d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ 15844d5abbe8Smrg \ 15854d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ 15864d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ 15874d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ 15884d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ 15894d5abbe8Smrg = denorm_absent; \ 15904d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ 15914d5abbe8Smrg \ 15924d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15934d5abbe8Smrg infinity() _GLIBCXX_USE_NOEXCEPT \ 15944d5abbe8Smrg { return static_cast<unsigned TYPE>(0); } \ 15954d5abbe8Smrg \ 15964d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15974d5abbe8Smrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ 15984d5abbe8Smrg { return static_cast<unsigned TYPE>(0); } \ 15994d5abbe8Smrg \ 16004d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 16014d5abbe8Smrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ 16024d5abbe8Smrg { return static_cast<unsigned TYPE>(0); } \ 16034d5abbe8Smrg \ 16044d5abbe8Smrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 16054d5abbe8Smrg denorm_min() _GLIBCXX_USE_NOEXCEPT \ 16064d5abbe8Smrg { return static_cast<unsigned TYPE>(0); } \ 16074d5abbe8Smrg \ 16084d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ 16094d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ 16104d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; \ 16114d5abbe8Smrg \ 16124d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \ 16134d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ 16144d5abbe8Smrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ 16154d5abbe8Smrg = round_toward_zero; \ 161648fb7bfaSmrg }; 161748fb7bfaSmrg 161848fb7bfaSmrg#if __cplusplus >= 201103L 161948fb7bfaSmrg 16204d5abbe8Smrg#define __INT_N_201103(TYPE) \ 16214d5abbe8Smrg static constexpr TYPE \ 16224d5abbe8Smrg lowest() noexcept { return min(); } \ 162348fb7bfaSmrg static constexpr int max_digits10 = 0; 16244d5abbe8Smrg 16254d5abbe8Smrg#define __INT_N_U201103(TYPE) \ 16264d5abbe8Smrg static constexpr unsigned TYPE \ 16274d5abbe8Smrg lowest() noexcept { return min(); } \ 16284d5abbe8Smrg static constexpr int max_digits10 = 0; 16294d5abbe8Smrg 16304d5abbe8Smrg#else 16314d5abbe8Smrg#define __INT_N_201103(TYPE) 16324d5abbe8Smrg#define __INT_N_U201103(TYPE) 163348fb7bfaSmrg#endif 163448fb7bfaSmrg 1635fb8a8121Smrg#if !defined(__STRICT_ANSI__) 16364d5abbe8Smrg#ifdef __GLIBCXX_TYPE_INT_N_0 16374d5abbe8Smrg __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0, 1638*b1e83836Smrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0), 1639*b1e83836Smrg __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0)) 16404d5abbe8Smrg#endif 16414d5abbe8Smrg#ifdef __GLIBCXX_TYPE_INT_N_1 16424d5abbe8Smrg __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1, 1643*b1e83836Smrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1), 1644*b1e83836Smrg __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1)) 16454d5abbe8Smrg#endif 16464d5abbe8Smrg#ifdef __GLIBCXX_TYPE_INT_N_2 16474d5abbe8Smrg __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2, 1648*b1e83836Smrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2), 1649*b1e83836Smrg __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2)) 16504d5abbe8Smrg#endif 16514d5abbe8Smrg#ifdef __GLIBCXX_TYPE_INT_N_3 16524d5abbe8Smrg __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3, 1653*b1e83836Smrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3), 1654*b1e83836Smrg __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3)) 16554d5abbe8Smrg#endif 165648fb7bfaSmrg 1657fb8a8121Smrg#elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ 1658fb8a8121Smrg __INT_N(__int128, 128, 1659fb8a8121Smrg __INT_N_201103 (__int128), 1660fb8a8121Smrg __INT_N_U201103 (__int128)) 1661fb8a8121Smrg#endif 1662fb8a8121Smrg 16634d5abbe8Smrg#undef __INT_N 16644d5abbe8Smrg#undef __INT_N_201103 16654d5abbe8Smrg#undef __INT_N_U201103 166648fb7bfaSmrg 166748fb7bfaSmrg 16684fee23f9Smrg /// numeric_limits<float> specialization. 16694fee23f9Smrg template<> 16704fee23f9Smrg struct numeric_limits<float> 16714fee23f9Smrg { 167248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 16734fee23f9Smrg 167448fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 167548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; } 167648fb7bfaSmrg 167748fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 167848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; } 167948fb7bfaSmrg 168048fb7bfaSmrg#if __cplusplus >= 201103L 168148fb7bfaSmrg static constexpr float 168248fb7bfaSmrg lowest() noexcept { return -__FLT_MAX__; } 16834fee23f9Smrg#endif 16844fee23f9Smrg 168548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; 168648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; 168748fb7bfaSmrg#if __cplusplus >= 201103L 168848fb7bfaSmrg static constexpr int max_digits10 16894fee23f9Smrg = __glibcxx_max_digits10 (__FLT_MANT_DIG__); 16904fee23f9Smrg#endif 169148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 169248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 169348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 169448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 16954fee23f9Smrg 169648fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 169748fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; } 16984fee23f9Smrg 169948fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 170048fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; } 170148fb7bfaSmrg 170248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; 170348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; 170448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; 170548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; 170648fb7bfaSmrg 170748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; 170848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; 170948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 171048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 17114fee23f9Smrg = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; 171248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 171348fb7bfaSmrg = __glibcxx_float_has_denorm_loss; 17144fee23f9Smrg 171548fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 171648fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); } 17174fee23f9Smrg 171848fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 171948fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); } 172048fb7bfaSmrg 172148fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 172248fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); } 172348fb7bfaSmrg 172448fb7bfaSmrg static _GLIBCXX_CONSTEXPR float 172548fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; } 172648fb7bfaSmrg 172748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 17284fee23f9Smrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 172948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 173048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 17314fee23f9Smrg 173248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; 173348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 173448fb7bfaSmrg = __glibcxx_float_tinyness_before; 173548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 173648fb7bfaSmrg = round_to_nearest; 17374fee23f9Smrg }; 17384fee23f9Smrg 17394fee23f9Smrg#undef __glibcxx_float_has_denorm_loss 17404fee23f9Smrg#undef __glibcxx_float_traps 17414fee23f9Smrg#undef __glibcxx_float_tinyness_before 17424fee23f9Smrg 17434fee23f9Smrg /// numeric_limits<double> specialization. 17444fee23f9Smrg template<> 17454fee23f9Smrg struct numeric_limits<double> 17464fee23f9Smrg { 174748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 17484fee23f9Smrg 174948fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 175048fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; } 175148fb7bfaSmrg 175248fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 175348fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; } 175448fb7bfaSmrg 175548fb7bfaSmrg#if __cplusplus >= 201103L 175648fb7bfaSmrg static constexpr double 175748fb7bfaSmrg lowest() noexcept { return -__DBL_MAX__; } 17584fee23f9Smrg#endif 17594fee23f9Smrg 176048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; 176148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; 176248fb7bfaSmrg#if __cplusplus >= 201103L 176348fb7bfaSmrg static constexpr int max_digits10 17644fee23f9Smrg = __glibcxx_max_digits10 (__DBL_MANT_DIG__); 17654fee23f9Smrg#endif 176648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 176748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 176848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 176948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 17704fee23f9Smrg 177148fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 177248fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; } 17734fee23f9Smrg 177448fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 177548fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } 177648fb7bfaSmrg 177748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; 177848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; 177948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; 178048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; 178148fb7bfaSmrg 178248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; 178348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; 178448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 178548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 17864fee23f9Smrg = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; 178748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 178848fb7bfaSmrg = __glibcxx_double_has_denorm_loss; 17894fee23f9Smrg 179048fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 179148fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); } 17924fee23f9Smrg 179348fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 179448fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); } 179548fb7bfaSmrg 179648fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 179748fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); } 179848fb7bfaSmrg 179948fb7bfaSmrg static _GLIBCXX_CONSTEXPR double 180048fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; } 180148fb7bfaSmrg 180248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 18034fee23f9Smrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 180448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 180548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 18064fee23f9Smrg 180748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; 180848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 180948fb7bfaSmrg = __glibcxx_double_tinyness_before; 181048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 181148fb7bfaSmrg = round_to_nearest; 18124fee23f9Smrg }; 18134fee23f9Smrg 18144fee23f9Smrg#undef __glibcxx_double_has_denorm_loss 18154fee23f9Smrg#undef __glibcxx_double_traps 18164fee23f9Smrg#undef __glibcxx_double_tinyness_before 18174fee23f9Smrg 18184fee23f9Smrg /// numeric_limits<long double> specialization. 18194fee23f9Smrg template<> 18204fee23f9Smrg struct numeric_limits<long double> 18214fee23f9Smrg { 182248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 18234fee23f9Smrg 182448fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 182548fb7bfaSmrg min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; } 182648fb7bfaSmrg 182748fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 182848fb7bfaSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; } 182948fb7bfaSmrg 183048fb7bfaSmrg#if __cplusplus >= 201103L 183148fb7bfaSmrg static constexpr long double 183248fb7bfaSmrg lowest() noexcept { return -__LDBL_MAX__; } 18334fee23f9Smrg#endif 18344fee23f9Smrg 183548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; 183648fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; 183748fb7bfaSmrg#if __cplusplus >= 201103L 183848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_digits10 18394fee23f9Smrg = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); 18404fee23f9Smrg#endif 184148fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 184248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 184348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 184448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 18454fee23f9Smrg 184648fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 184748fb7bfaSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; } 18484fee23f9Smrg 184948fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 185048fb7bfaSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; } 185148fb7bfaSmrg 185248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; 185348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; 185448fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; 185548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; 185648fb7bfaSmrg 185748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; 185848fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; 185948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 186048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 18614fee23f9Smrg = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; 186248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 18634fee23f9Smrg = __glibcxx_long_double_has_denorm_loss; 18644fee23f9Smrg 186548fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 186648fb7bfaSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); } 18674fee23f9Smrg 186848fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 186948fb7bfaSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); } 187048fb7bfaSmrg 187148fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 187248fb7bfaSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); } 187348fb7bfaSmrg 187448fb7bfaSmrg static _GLIBCXX_CONSTEXPR long double 187548fb7bfaSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; } 187648fb7bfaSmrg 187748fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 18784fee23f9Smrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 187948fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 188048fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 18814fee23f9Smrg 188248fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; 188348fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 188448fb7bfaSmrg __glibcxx_long_double_tinyness_before; 188548fb7bfaSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 188648fb7bfaSmrg round_to_nearest; 18874fee23f9Smrg }; 18884fee23f9Smrg 18894fee23f9Smrg#undef __glibcxx_long_double_has_denorm_loss 18904fee23f9Smrg#undef __glibcxx_long_double_traps 18914fee23f9Smrg#undef __glibcxx_long_double_tinyness_before 18924fee23f9Smrg 189348fb7bfaSmrg_GLIBCXX_END_NAMESPACE_VERSION 189448fb7bfaSmrg} // namespace 18954fee23f9Smrg 18964fee23f9Smrg#undef __glibcxx_signed 18974fee23f9Smrg#undef __glibcxx_min 18984fee23f9Smrg#undef __glibcxx_max 18994fee23f9Smrg#undef __glibcxx_digits 19004fee23f9Smrg#undef __glibcxx_digits10 19014fee23f9Smrg#undef __glibcxx_max_digits10 19024fee23f9Smrg 19034fee23f9Smrg#endif // _GLIBCXX_NUMERIC_LIMITS 1904