11debfc3dSmrg// The template and inlines for the numeric_limits classes. -*- C++ -*- 21debfc3dSmrg 3*8feb0f0bSmrg// Copyright (C) 1999-2020 Free Software Foundation, Inc. 41debfc3dSmrg// 51debfc3dSmrg// This file is part of the GNU ISO C++ Library. This library is free 61debfc3dSmrg// software; you can redistribute it and/or modify it under the 71debfc3dSmrg// terms of the GNU General Public License as published by the 81debfc3dSmrg// Free Software Foundation; either version 3, or (at your option) 91debfc3dSmrg// any later version. 101debfc3dSmrg 111debfc3dSmrg// This library is distributed in the hope that it will be useful, 121debfc3dSmrg// but WITHOUT ANY WARRANTY; without even the implied warranty of 131debfc3dSmrg// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 141debfc3dSmrg// GNU General Public License for more details. 151debfc3dSmrg 161debfc3dSmrg// Under Section 7 of GPL version 3, you are granted additional 171debfc3dSmrg// permissions described in the GCC Runtime Library Exception, version 181debfc3dSmrg// 3.1, as published by the Free Software Foundation. 191debfc3dSmrg 201debfc3dSmrg// You should have received a copy of the GNU General Public License and 211debfc3dSmrg// a copy of the GCC Runtime Library Exception along with this program; 221debfc3dSmrg// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 231debfc3dSmrg// <http://www.gnu.org/licenses/>. 241debfc3dSmrg 251debfc3dSmrg/** @file include/limits 261debfc3dSmrg * This is a Standard C++ Library header. 271debfc3dSmrg */ 281debfc3dSmrg 291debfc3dSmrg// Note: this is not a conforming implementation. 301debfc3dSmrg// Written by Gabriel Dos Reis <gdr@codesourcery.com> 311debfc3dSmrg 321debfc3dSmrg// 331debfc3dSmrg// ISO 14882:1998 341debfc3dSmrg// 18.2.1 351debfc3dSmrg// 361debfc3dSmrg 371debfc3dSmrg#ifndef _GLIBCXX_NUMERIC_LIMITS 381debfc3dSmrg#define _GLIBCXX_NUMERIC_LIMITS 1 391debfc3dSmrg 401debfc3dSmrg#pragma GCC system_header 411debfc3dSmrg 421debfc3dSmrg#include <bits/c++config.h> 431debfc3dSmrg 441debfc3dSmrg// 451debfc3dSmrg// The numeric_limits<> traits document implementation-defined aspects 461debfc3dSmrg// of fundamental arithmetic data types (integers and floating points). 471debfc3dSmrg// From Standard C++ point of view, there are 14 such types: 481debfc3dSmrg// * integers 491debfc3dSmrg// bool (1) 501debfc3dSmrg// char, signed char, unsigned char, wchar_t (4) 511debfc3dSmrg// short, unsigned short (2) 521debfc3dSmrg// int, unsigned (2) 531debfc3dSmrg// long, unsigned long (2) 541debfc3dSmrg// 551debfc3dSmrg// * floating points 561debfc3dSmrg// float (1) 571debfc3dSmrg// double (1) 581debfc3dSmrg// long double (1) 591debfc3dSmrg// 601debfc3dSmrg// GNU C++ understands (where supported by the host C-library) 611debfc3dSmrg// * integer 621debfc3dSmrg// long long, unsigned long long (2) 631debfc3dSmrg// 641debfc3dSmrg// which brings us to 16 fundamental arithmetic data types in GNU C++. 651debfc3dSmrg// 661debfc3dSmrg// 671debfc3dSmrg// Since a numeric_limits<> is a bit tricky to get right, we rely on 681debfc3dSmrg// an interface composed of macros which should be defined in config/os 691debfc3dSmrg// or config/cpu when they differ from the generic (read arbitrary) 701debfc3dSmrg// definitions given here. 711debfc3dSmrg// 721debfc3dSmrg 731debfc3dSmrg// These values can be overridden in the target configuration file. 741debfc3dSmrg// The default values are appropriate for many 32-bit targets. 751debfc3dSmrg 761debfc3dSmrg// GCC only intrinsically supports modulo integral types. The only remaining 771debfc3dSmrg// integral exceptional values is division by zero. Only targets that do not 781debfc3dSmrg// signal division by zero in some "hard to ignore" way should use false. 791debfc3dSmrg#ifndef __glibcxx_integral_traps 801debfc3dSmrg# define __glibcxx_integral_traps true 811debfc3dSmrg#endif 821debfc3dSmrg 831debfc3dSmrg// float 841debfc3dSmrg// 851debfc3dSmrg 861debfc3dSmrg// Default values. Should be overridden in configuration files if necessary. 871debfc3dSmrg 881debfc3dSmrg#ifndef __glibcxx_float_has_denorm_loss 891debfc3dSmrg# define __glibcxx_float_has_denorm_loss false 901debfc3dSmrg#endif 911debfc3dSmrg#ifndef __glibcxx_float_traps 921debfc3dSmrg# define __glibcxx_float_traps false 931debfc3dSmrg#endif 941debfc3dSmrg#ifndef __glibcxx_float_tinyness_before 951debfc3dSmrg# define __glibcxx_float_tinyness_before false 961debfc3dSmrg#endif 971debfc3dSmrg 981debfc3dSmrg// double 991debfc3dSmrg 1001debfc3dSmrg// Default values. Should be overridden in configuration files if necessary. 1011debfc3dSmrg 1021debfc3dSmrg#ifndef __glibcxx_double_has_denorm_loss 1031debfc3dSmrg# define __glibcxx_double_has_denorm_loss false 1041debfc3dSmrg#endif 1051debfc3dSmrg#ifndef __glibcxx_double_traps 1061debfc3dSmrg# define __glibcxx_double_traps false 1071debfc3dSmrg#endif 1081debfc3dSmrg#ifndef __glibcxx_double_tinyness_before 1091debfc3dSmrg# define __glibcxx_double_tinyness_before false 1101debfc3dSmrg#endif 1111debfc3dSmrg 1121debfc3dSmrg// long double 1131debfc3dSmrg 1141debfc3dSmrg// Default values. Should be overridden in configuration files if necessary. 1151debfc3dSmrg 1161debfc3dSmrg#ifndef __glibcxx_long_double_has_denorm_loss 1171debfc3dSmrg# define __glibcxx_long_double_has_denorm_loss false 1181debfc3dSmrg#endif 1191debfc3dSmrg#ifndef __glibcxx_long_double_traps 1201debfc3dSmrg# define __glibcxx_long_double_traps false 1211debfc3dSmrg#endif 1221debfc3dSmrg#ifndef __glibcxx_long_double_tinyness_before 1231debfc3dSmrg# define __glibcxx_long_double_tinyness_before false 1241debfc3dSmrg#endif 1251debfc3dSmrg 1261debfc3dSmrg// You should not need to define any macros below this point. 1271debfc3dSmrg 1281debfc3dSmrg#define __glibcxx_signed_b(T,B) ((T)(-1) < 0) 1291debfc3dSmrg 1301debfc3dSmrg#define __glibcxx_min_b(T,B) \ 1311debfc3dSmrg (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0) 1321debfc3dSmrg 1331debfc3dSmrg#define __glibcxx_max_b(T,B) \ 1341debfc3dSmrg (__glibcxx_signed_b (T,B) ? \ 1351debfc3dSmrg (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0) 1361debfc3dSmrg 1371debfc3dSmrg#define __glibcxx_digits_b(T,B) \ 1381debfc3dSmrg (B - __glibcxx_signed_b (T,B)) 1391debfc3dSmrg 1401debfc3dSmrg// The fraction 643/2136 approximates log10(2) to 7 significant digits. 1411debfc3dSmrg#define __glibcxx_digits10_b(T,B) \ 1421debfc3dSmrg (__glibcxx_digits_b (T,B) * 643L / 2136) 1431debfc3dSmrg 1441debfc3dSmrg#define __glibcxx_signed(T) \ 1451debfc3dSmrg __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__) 1461debfc3dSmrg#define __glibcxx_min(T) \ 1471debfc3dSmrg __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__) 1481debfc3dSmrg#define __glibcxx_max(T) \ 1491debfc3dSmrg __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__) 1501debfc3dSmrg#define __glibcxx_digits(T) \ 1511debfc3dSmrg __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__) 1521debfc3dSmrg#define __glibcxx_digits10(T) \ 1531debfc3dSmrg __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__) 1541debfc3dSmrg 1551debfc3dSmrg#define __glibcxx_max_digits10(T) \ 1561debfc3dSmrg (2 + (T) * 643L / 2136) 1571debfc3dSmrg 1581debfc3dSmrgnamespace std _GLIBCXX_VISIBILITY(default) 1591debfc3dSmrg{ 1601debfc3dSmrg_GLIBCXX_BEGIN_NAMESPACE_VERSION 1611debfc3dSmrg 1621debfc3dSmrg /** 1631debfc3dSmrg * @brief Describes the rounding style for floating-point types. 1641debfc3dSmrg * 1651debfc3dSmrg * This is used in the std::numeric_limits class. 1661debfc3dSmrg */ 1671debfc3dSmrg enum float_round_style 1681debfc3dSmrg { 1691debfc3dSmrg round_indeterminate = -1, /// Intermediate. 1701debfc3dSmrg round_toward_zero = 0, /// To zero. 1711debfc3dSmrg round_to_nearest = 1, /// To the nearest representable value. 1721debfc3dSmrg round_toward_infinity = 2, /// To infinity. 1731debfc3dSmrg round_toward_neg_infinity = 3 /// To negative infinity. 1741debfc3dSmrg }; 1751debfc3dSmrg 1761debfc3dSmrg /** 1771debfc3dSmrg * @brief Describes the denormalization for floating-point types. 1781debfc3dSmrg * 1791debfc3dSmrg * These values represent the presence or absence of a variable number 1801debfc3dSmrg * of exponent bits. This type is used in the std::numeric_limits class. 1811debfc3dSmrg */ 1821debfc3dSmrg enum float_denorm_style 1831debfc3dSmrg { 1841debfc3dSmrg /// Indeterminate at compile time whether denormalized values are allowed. 1851debfc3dSmrg denorm_indeterminate = -1, 1861debfc3dSmrg /// The type does not allow denormalized values. 1871debfc3dSmrg denorm_absent = 0, 1881debfc3dSmrg /// The type allows denormalized values. 1891debfc3dSmrg denorm_present = 1 1901debfc3dSmrg }; 1911debfc3dSmrg 1921debfc3dSmrg /** 1931debfc3dSmrg * @brief Part of std::numeric_limits. 1941debfc3dSmrg * 1951debfc3dSmrg * The @c static @c const members are usable as integral constant 1961debfc3dSmrg * expressions. 1971debfc3dSmrg * 1981debfc3dSmrg * @note This is a separate class for purposes of efficiency; you 1991debfc3dSmrg * should only access these members as part of an instantiation 2001debfc3dSmrg * of the std::numeric_limits class. 2011debfc3dSmrg */ 2021debfc3dSmrg struct __numeric_limits_base 2031debfc3dSmrg { 2041debfc3dSmrg /** This will be true for all fundamental types (which have 2051debfc3dSmrg specializations), and false for everything else. */ 2061debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false; 2071debfc3dSmrg 2081debfc3dSmrg /** The number of @c radix digits that be represented without change: for 2091debfc3dSmrg integer types, the number of non-sign bits in the mantissa; for 2101debfc3dSmrg floating types, the number of @c radix digits in the mantissa. */ 2111debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = 0; 2121debfc3dSmrg 2131debfc3dSmrg /** The number of base 10 digits that can be represented without change. */ 2141debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 2151debfc3dSmrg 2161debfc3dSmrg#if __cplusplus >= 201103L 2171debfc3dSmrg /** The number of base 10 digits required to ensure that values which 2181debfc3dSmrg differ are always differentiated. */ 2191debfc3dSmrg static constexpr int max_digits10 = 0; 2201debfc3dSmrg#endif 2211debfc3dSmrg 2221debfc3dSmrg /** True if the type is signed. */ 2231debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 2241debfc3dSmrg 2251debfc3dSmrg /** True if the type is integer. */ 2261debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 2271debfc3dSmrg 2281debfc3dSmrg /** True if the type uses an exact representation. All integer types are 2291debfc3dSmrg exact, but not all exact types are integer. For example, rational and 2301debfc3dSmrg fixed-exponent representations are exact but not integer. */ 2311debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 2321debfc3dSmrg 2331debfc3dSmrg /** For integer types, specifies the base of the representation. For 2341debfc3dSmrg floating types, specifies the base of the exponent representation. */ 2351debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 0; 2361debfc3dSmrg 2371debfc3dSmrg /** The minimum negative integer such that @c radix raised to the power of 2381debfc3dSmrg (one less than that integer) is a normalized floating point number. */ 2391debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 2401debfc3dSmrg 2411debfc3dSmrg /** The minimum negative integer such that 10 raised to that power is in 2421debfc3dSmrg the range of normalized floating point numbers. */ 2431debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 2441debfc3dSmrg 2451debfc3dSmrg /** The maximum positive integer such that @c radix raised to the power of 2461debfc3dSmrg (one less than that integer) is a representable finite floating point 2471debfc3dSmrg number. */ 2481debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 2491debfc3dSmrg 2501debfc3dSmrg /** The maximum positive integer such that 10 raised to that power is in 2511debfc3dSmrg the range of representable finite floating point numbers. */ 2521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 2531debfc3dSmrg 2541debfc3dSmrg /** True if the type has a representation for positive infinity. */ 2551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 2561debfc3dSmrg 2571debfc3dSmrg /** True if the type has a representation for a quiet (non-signaling) 2581debfc3dSmrg Not a Number. */ 2591debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 2601debfc3dSmrg 2611debfc3dSmrg /** True if the type has a representation for a signaling 2621debfc3dSmrg Not a Number. */ 2631debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 2641debfc3dSmrg 2651debfc3dSmrg /** See std::float_denorm_style for more information. */ 2661debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent; 2671debfc3dSmrg 2681debfc3dSmrg /** True if loss of accuracy is detected as a denormalization loss, 2691debfc3dSmrg rather than as an inexact result. */ 2701debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 2711debfc3dSmrg 2721debfc3dSmrg /** True if-and-only-if the type adheres to the IEC 559 standard, also 2731debfc3dSmrg known as IEEE 754. (Only makes sense for floating point types.) */ 2741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 2751debfc3dSmrg 2761debfc3dSmrg /** True if the set of values representable by the type is 2771debfc3dSmrg finite. All built-in types are bounded, this member would be 2781debfc3dSmrg false for arbitrary precision types. */ 2791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false; 2801debfc3dSmrg 2811debfc3dSmrg /** True if the type is @e modulo. A type is modulo if, for any 2821debfc3dSmrg operation involving +, -, or * on values of that type whose 2831debfc3dSmrg result would fall outside the range [min(),max()], the value 2841debfc3dSmrg returned differs from the true value by an integer multiple of 2851debfc3dSmrg max() - min() + 1. On most machines, this is false for floating 2861debfc3dSmrg types, true for unsigned integers, and true for signed integers. 2871debfc3dSmrg See PR22200 about signed integers. */ 2881debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 2891debfc3dSmrg 2901debfc3dSmrg /** True if trapping is implemented for this type. */ 2911debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = false; 2921debfc3dSmrg 2931debfc3dSmrg /** True if tininess is detected before rounding. (see IEC 559) */ 2941debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 2951debfc3dSmrg 2961debfc3dSmrg /** See std::float_round_style for more information. This is only 2971debfc3dSmrg meaningful for floating types; integer types will all be 2981debfc3dSmrg round_toward_zero. */ 2991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 3001debfc3dSmrg round_toward_zero; 3011debfc3dSmrg }; 3021debfc3dSmrg 3031debfc3dSmrg /** 3041debfc3dSmrg * @brief Properties of fundamental types. 3051debfc3dSmrg * 3061debfc3dSmrg * This class allows a program to obtain information about the 3071debfc3dSmrg * representation of a fundamental type on a given platform. For 3081debfc3dSmrg * non-fundamental types, the functions will return 0 and the data 3091debfc3dSmrg * members will all be @c false. 3101debfc3dSmrg */ 3111debfc3dSmrg template<typename _Tp> 3121debfc3dSmrg struct numeric_limits : public __numeric_limits_base 3131debfc3dSmrg { 3141debfc3dSmrg /** The minimum finite value, or for floating types with 3151debfc3dSmrg denormalization, the minimum positive normalized value. */ 3161debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3171debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3181debfc3dSmrg 3191debfc3dSmrg /** The maximum finite value. */ 3201debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3211debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3221debfc3dSmrg 3231debfc3dSmrg#if __cplusplus >= 201103L 3241debfc3dSmrg /** A finite value x such that there is no other finite value y 3251debfc3dSmrg * where y < x. */ 3261debfc3dSmrg static constexpr _Tp 3271debfc3dSmrg lowest() noexcept { return _Tp(); } 3281debfc3dSmrg#endif 3291debfc3dSmrg 3301debfc3dSmrg /** The @e machine @e epsilon: the difference between 1 and the least 3311debfc3dSmrg value greater than 1 that is representable. */ 3321debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3331debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3341debfc3dSmrg 3351debfc3dSmrg /** The maximum rounding error measurement (see LIA-1). */ 3361debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3371debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3381debfc3dSmrg 3391debfc3dSmrg /** The representation of positive infinity, if @c has_infinity. */ 3401debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3411debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3421debfc3dSmrg 3431debfc3dSmrg /** The representation of a quiet Not a Number, 3441debfc3dSmrg if @c has_quiet_NaN. */ 3451debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3461debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3471debfc3dSmrg 3481debfc3dSmrg /** The representation of a signaling Not a Number, if 3491debfc3dSmrg @c has_signaling_NaN. */ 3501debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3511debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3521debfc3dSmrg 3531debfc3dSmrg /** The minimum positive denormalized value. For types where 3541debfc3dSmrg @c has_denorm is false, this is the minimum positive normalized 3551debfc3dSmrg value. */ 3561debfc3dSmrg static _GLIBCXX_CONSTEXPR _Tp 3571debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } 3581debfc3dSmrg }; 3591debfc3dSmrg 3601debfc3dSmrg // _GLIBCXX_RESOLVE_LIB_DEFECTS 3611debfc3dSmrg // 559. numeric_limits<const T> 3621debfc3dSmrg 3631debfc3dSmrg template<typename _Tp> 3641debfc3dSmrg struct numeric_limits<const _Tp> 3651debfc3dSmrg : public numeric_limits<_Tp> { }; 3661debfc3dSmrg 3671debfc3dSmrg template<typename _Tp> 3681debfc3dSmrg struct numeric_limits<volatile _Tp> 3691debfc3dSmrg : public numeric_limits<_Tp> { }; 3701debfc3dSmrg 3711debfc3dSmrg template<typename _Tp> 3721debfc3dSmrg struct numeric_limits<const volatile _Tp> 3731debfc3dSmrg : public numeric_limits<_Tp> { }; 3741debfc3dSmrg 3751debfc3dSmrg // Now there follow 16 explicit specializations. Yes, 16. Make sure 3761debfc3dSmrg // you get the count right. (18 in C++11 mode, with char16_t and char32_t.) 377c0a68be4Smrg // (+1 if char8_t is enabled.) 3781debfc3dSmrg 3791debfc3dSmrg // _GLIBCXX_RESOLVE_LIB_DEFECTS 3801debfc3dSmrg // 184. numeric_limits<bool> wording problems 3811debfc3dSmrg 3821debfc3dSmrg /// numeric_limits<bool> specialization. 3831debfc3dSmrg template<> 3841debfc3dSmrg struct numeric_limits<bool> 3851debfc3dSmrg { 3861debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 3871debfc3dSmrg 3881debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 3891debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return false; } 3901debfc3dSmrg 3911debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 3921debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return true; } 3931debfc3dSmrg 3941debfc3dSmrg#if __cplusplus >= 201103L 3951debfc3dSmrg static constexpr bool 3961debfc3dSmrg lowest() noexcept { return min(); } 3971debfc3dSmrg#endif 3981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = 1; 3991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; 4001debfc3dSmrg#if __cplusplus >= 201103L 4011debfc3dSmrg static constexpr int max_digits10 = 0; 4021debfc3dSmrg#endif 4031debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 4041debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 4051debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 4061debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 4071debfc3dSmrg 4081debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4091debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } 4101debfc3dSmrg 4111debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4121debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return false; } 4131debfc3dSmrg 4141debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 4151debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 4161debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 4171debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 4181debfc3dSmrg 4191debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 4201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 4211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 4221debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 4231debfc3dSmrg = denorm_absent; 4241debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 4251debfc3dSmrg 4261debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4271debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return false; } 4281debfc3dSmrg 4291debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4301debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 4311debfc3dSmrg 4321debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4331debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; } 4341debfc3dSmrg 4351debfc3dSmrg static _GLIBCXX_CONSTEXPR bool 4361debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; } 4371debfc3dSmrg 4381debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 4391debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 4401debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 4411debfc3dSmrg 4421debfc3dSmrg // It is not clear what it means for a boolean type to trap. 4431debfc3dSmrg // This is a DR on the LWG issue list. Here, I use integer 4441debfc3dSmrg // promotion semantics. 4451debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 4461debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 4471debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 4481debfc3dSmrg = round_toward_zero; 4491debfc3dSmrg }; 4501debfc3dSmrg 4511debfc3dSmrg /// numeric_limits<char> specialization. 4521debfc3dSmrg template<> 4531debfc3dSmrg struct numeric_limits<char> 4541debfc3dSmrg { 4551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 4561debfc3dSmrg 4571debfc3dSmrg static _GLIBCXX_CONSTEXPR char 4581debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); } 4591debfc3dSmrg 4601debfc3dSmrg static _GLIBCXX_CONSTEXPR char 4611debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); } 4621debfc3dSmrg 4631debfc3dSmrg#if __cplusplus >= 201103L 4641debfc3dSmrg static constexpr char 4651debfc3dSmrg lowest() noexcept { return min(); } 4661debfc3dSmrg#endif 4671debfc3dSmrg 4681debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char); 4691debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char); 4701debfc3dSmrg#if __cplusplus >= 201103L 4711debfc3dSmrg static constexpr int max_digits10 = 0; 4721debfc3dSmrg#endif 4731debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char); 4741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 4751debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 4761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 4771debfc3dSmrg 4781debfc3dSmrg static _GLIBCXX_CONSTEXPR char 4791debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 4801debfc3dSmrg 4811debfc3dSmrg static _GLIBCXX_CONSTEXPR char 4821debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 4831debfc3dSmrg 4841debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 4851debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 4861debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 4871debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 4881debfc3dSmrg 4891debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 4901debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 4911debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 4921debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 4931debfc3dSmrg = denorm_absent; 4941debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 4951debfc3dSmrg 4961debfc3dSmrg static _GLIBCXX_CONSTEXPR 4971debfc3dSmrg char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); } 4981debfc3dSmrg 4991debfc3dSmrg static _GLIBCXX_CONSTEXPR char 5001debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 5011debfc3dSmrg 5021debfc3dSmrg static _GLIBCXX_CONSTEXPR char 5031debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); } 5041debfc3dSmrg 5051debfc3dSmrg static _GLIBCXX_CONSTEXPR char 5061debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); } 5071debfc3dSmrg 5081debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 5091debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 5101debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 5111debfc3dSmrg 5121debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 5131debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 5141debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 5151debfc3dSmrg = round_toward_zero; 5161debfc3dSmrg }; 5171debfc3dSmrg 5181debfc3dSmrg /// numeric_limits<signed char> specialization. 5191debfc3dSmrg template<> 5201debfc3dSmrg struct numeric_limits<signed char> 5211debfc3dSmrg { 5221debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 5231debfc3dSmrg 5241debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5251debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; } 5261debfc3dSmrg 5271debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5281debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; } 5291debfc3dSmrg 5301debfc3dSmrg#if __cplusplus >= 201103L 5311debfc3dSmrg static constexpr signed char 5321debfc3dSmrg lowest() noexcept { return min(); } 5331debfc3dSmrg#endif 5341debfc3dSmrg 5351debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char); 5361debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 5371debfc3dSmrg = __glibcxx_digits10 (signed char); 5381debfc3dSmrg#if __cplusplus >= 201103L 5391debfc3dSmrg static constexpr int max_digits10 = 0; 5401debfc3dSmrg#endif 5411debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 5421debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 5431debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 5441debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 5451debfc3dSmrg 5461debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5471debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 5481debfc3dSmrg 5491debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5501debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 5511debfc3dSmrg 5521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 5531debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 5541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 5551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 5561debfc3dSmrg 5571debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 5581debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 5591debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 5601debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 5611debfc3dSmrg = denorm_absent; 5621debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 5631debfc3dSmrg 5641debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5651debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 5661debfc3dSmrg 5671debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5681debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); } 5691debfc3dSmrg 5701debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5711debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 5721debfc3dSmrg { return static_cast<signed char>(0); } 5731debfc3dSmrg 5741debfc3dSmrg static _GLIBCXX_CONSTEXPR signed char 5751debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 5761debfc3dSmrg { return static_cast<signed char>(0); } 5771debfc3dSmrg 5781debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 5791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 5801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 5811debfc3dSmrg 5821debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 5831debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 5841debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 5851debfc3dSmrg = round_toward_zero; 5861debfc3dSmrg }; 5871debfc3dSmrg 5881debfc3dSmrg /// numeric_limits<unsigned char> specialization. 5891debfc3dSmrg template<> 5901debfc3dSmrg struct numeric_limits<unsigned char> 5911debfc3dSmrg { 5921debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 5931debfc3dSmrg 5941debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 5951debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 5961debfc3dSmrg 5971debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 5981debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; } 5991debfc3dSmrg 6001debfc3dSmrg#if __cplusplus >= 201103L 6011debfc3dSmrg static constexpr unsigned char 6021debfc3dSmrg lowest() noexcept { return min(); } 6031debfc3dSmrg#endif 6041debfc3dSmrg 6051debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 6061debfc3dSmrg = __glibcxx_digits (unsigned char); 6071debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 6081debfc3dSmrg = __glibcxx_digits10 (unsigned char); 6091debfc3dSmrg#if __cplusplus >= 201103L 6101debfc3dSmrg static constexpr int max_digits10 = 0; 6111debfc3dSmrg#endif 6121debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 6131debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 6141debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 6151debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 6161debfc3dSmrg 6171debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6181debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 6191debfc3dSmrg 6201debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6211debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 6221debfc3dSmrg 6231debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 6241debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 6251debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 6261debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 6271debfc3dSmrg 6281debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 6291debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 6301debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 6311debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 6321debfc3dSmrg = denorm_absent; 6331debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 6341debfc3dSmrg 6351debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6361debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT 6371debfc3dSmrg { return static_cast<unsigned char>(0); } 6381debfc3dSmrg 6391debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6401debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 6411debfc3dSmrg { return static_cast<unsigned char>(0); } 6421debfc3dSmrg 6431debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6441debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 6451debfc3dSmrg { return static_cast<unsigned char>(0); } 6461debfc3dSmrg 6471debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned char 6481debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 6491debfc3dSmrg { return static_cast<unsigned char>(0); } 6501debfc3dSmrg 6511debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 6521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 6531debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 6541debfc3dSmrg 6551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 6561debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 6571debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 6581debfc3dSmrg = round_toward_zero; 6591debfc3dSmrg }; 6601debfc3dSmrg 6611debfc3dSmrg /// numeric_limits<wchar_t> specialization. 6621debfc3dSmrg template<> 6631debfc3dSmrg struct numeric_limits<wchar_t> 6641debfc3dSmrg { 6651debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 6661debfc3dSmrg 6671debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 6681debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); } 6691debfc3dSmrg 6701debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 6711debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); } 6721debfc3dSmrg 6731debfc3dSmrg#if __cplusplus >= 201103L 6741debfc3dSmrg static constexpr wchar_t 6751debfc3dSmrg lowest() noexcept { return min(); } 6761debfc3dSmrg#endif 6771debfc3dSmrg 6781debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t); 6791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 6801debfc3dSmrg = __glibcxx_digits10 (wchar_t); 6811debfc3dSmrg#if __cplusplus >= 201103L 6821debfc3dSmrg static constexpr int max_digits10 = 0; 6831debfc3dSmrg#endif 6841debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t); 6851debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 6861debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 6871debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 6881debfc3dSmrg 6891debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 6901debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 6911debfc3dSmrg 6921debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 6931debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 6941debfc3dSmrg 6951debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 6961debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 6971debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 6981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 6991debfc3dSmrg 7001debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 7011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 7021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 7031debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 7041debfc3dSmrg = denorm_absent; 7051debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 7061debfc3dSmrg 7071debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 7081debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 7091debfc3dSmrg 7101debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 7111debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 7121debfc3dSmrg 7131debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 7141debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 7151debfc3dSmrg 7161debfc3dSmrg static _GLIBCXX_CONSTEXPR wchar_t 7171debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); } 7181debfc3dSmrg 7191debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 7201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 7211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 7221debfc3dSmrg 7231debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 7241debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 7251debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 7261debfc3dSmrg = round_toward_zero; 7271debfc3dSmrg }; 7281debfc3dSmrg 729c0a68be4Smrg#if _GLIBCXX_USE_CHAR8_T 730c0a68be4Smrg /// numeric_limits<char8_t> specialization. 731c0a68be4Smrg template<> 732c0a68be4Smrg struct numeric_limits<char8_t> 733c0a68be4Smrg { 734c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 735c0a68be4Smrg 736c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 737c0a68be4Smrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); } 738c0a68be4Smrg 739c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 740c0a68be4Smrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); } 741c0a68be4Smrg 742c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 743c0a68be4Smrg lowest() _GLIBCXX_USE_NOEXCEPT { return min(); } 744c0a68be4Smrg 745c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t); 746c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t); 747c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0; 748c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t); 749c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 750c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 751c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 752c0a68be4Smrg 753c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 754c0a68be4Smrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 755c0a68be4Smrg 756c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 757c0a68be4Smrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 758c0a68be4Smrg 759c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 760c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 761c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 762c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 763c0a68be4Smrg 764c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 765c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 766c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 767c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 768c0a68be4Smrg = denorm_absent; 769c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 770c0a68be4Smrg 771c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 772c0a68be4Smrg infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 773c0a68be4Smrg 774c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 775c0a68be4Smrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 776c0a68be4Smrg 777c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 778c0a68be4Smrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 779c0a68be4Smrg 780c0a68be4Smrg static _GLIBCXX_CONSTEXPR char8_t 781c0a68be4Smrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); } 782c0a68be4Smrg 783c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 784c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 785c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed; 786c0a68be4Smrg 787c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 788c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 789c0a68be4Smrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 790c0a68be4Smrg = round_toward_zero; 791c0a68be4Smrg }; 792c0a68be4Smrg#endif 793c0a68be4Smrg 7941debfc3dSmrg#if __cplusplus >= 201103L 7951debfc3dSmrg /// numeric_limits<char16_t> specialization. 7961debfc3dSmrg template<> 7971debfc3dSmrg struct numeric_limits<char16_t> 7981debfc3dSmrg { 7991debfc3dSmrg static constexpr bool is_specialized = true; 8001debfc3dSmrg 8011debfc3dSmrg static constexpr char16_t 8021debfc3dSmrg min() noexcept { return __glibcxx_min (char16_t); } 8031debfc3dSmrg 8041debfc3dSmrg static constexpr char16_t 8051debfc3dSmrg max() noexcept { return __glibcxx_max (char16_t); } 8061debfc3dSmrg 8071debfc3dSmrg static constexpr char16_t 8081debfc3dSmrg lowest() noexcept { return min(); } 8091debfc3dSmrg 8101debfc3dSmrg static constexpr int digits = __glibcxx_digits (char16_t); 8111debfc3dSmrg static constexpr int digits10 = __glibcxx_digits10 (char16_t); 8121debfc3dSmrg static constexpr int max_digits10 = 0; 8131debfc3dSmrg static constexpr bool is_signed = __glibcxx_signed (char16_t); 8141debfc3dSmrg static constexpr bool is_integer = true; 8151debfc3dSmrg static constexpr bool is_exact = true; 8161debfc3dSmrg static constexpr int radix = 2; 8171debfc3dSmrg 8181debfc3dSmrg static constexpr char16_t 8191debfc3dSmrg epsilon() noexcept { return 0; } 8201debfc3dSmrg 8211debfc3dSmrg static constexpr char16_t 8221debfc3dSmrg round_error() noexcept { return 0; } 8231debfc3dSmrg 8241debfc3dSmrg static constexpr int min_exponent = 0; 8251debfc3dSmrg static constexpr int min_exponent10 = 0; 8261debfc3dSmrg static constexpr int max_exponent = 0; 8271debfc3dSmrg static constexpr int max_exponent10 = 0; 8281debfc3dSmrg 8291debfc3dSmrg static constexpr bool has_infinity = false; 8301debfc3dSmrg static constexpr bool has_quiet_NaN = false; 8311debfc3dSmrg static constexpr bool has_signaling_NaN = false; 8321debfc3dSmrg static constexpr float_denorm_style has_denorm = denorm_absent; 8331debfc3dSmrg static constexpr bool has_denorm_loss = false; 8341debfc3dSmrg 8351debfc3dSmrg static constexpr char16_t 8361debfc3dSmrg infinity() noexcept { return char16_t(); } 8371debfc3dSmrg 8381debfc3dSmrg static constexpr char16_t 8391debfc3dSmrg quiet_NaN() noexcept { return char16_t(); } 8401debfc3dSmrg 8411debfc3dSmrg static constexpr char16_t 8421debfc3dSmrg signaling_NaN() noexcept { return char16_t(); } 8431debfc3dSmrg 8441debfc3dSmrg static constexpr char16_t 8451debfc3dSmrg denorm_min() noexcept { return char16_t(); } 8461debfc3dSmrg 8471debfc3dSmrg static constexpr bool is_iec559 = false; 8481debfc3dSmrg static constexpr bool is_bounded = true; 8491debfc3dSmrg static constexpr bool is_modulo = !is_signed; 8501debfc3dSmrg 8511debfc3dSmrg static constexpr bool traps = __glibcxx_integral_traps; 8521debfc3dSmrg static constexpr bool tinyness_before = false; 8531debfc3dSmrg static constexpr float_round_style round_style = round_toward_zero; 8541debfc3dSmrg }; 8551debfc3dSmrg 8561debfc3dSmrg /// numeric_limits<char32_t> specialization. 8571debfc3dSmrg template<> 8581debfc3dSmrg struct numeric_limits<char32_t> 8591debfc3dSmrg { 8601debfc3dSmrg static constexpr bool is_specialized = true; 8611debfc3dSmrg 8621debfc3dSmrg static constexpr char32_t 8631debfc3dSmrg min() noexcept { return __glibcxx_min (char32_t); } 8641debfc3dSmrg 8651debfc3dSmrg static constexpr char32_t 8661debfc3dSmrg max() noexcept { return __glibcxx_max (char32_t); } 8671debfc3dSmrg 8681debfc3dSmrg static constexpr char32_t 8691debfc3dSmrg lowest() noexcept { return min(); } 8701debfc3dSmrg 8711debfc3dSmrg static constexpr int digits = __glibcxx_digits (char32_t); 8721debfc3dSmrg static constexpr int digits10 = __glibcxx_digits10 (char32_t); 8731debfc3dSmrg static constexpr int max_digits10 = 0; 8741debfc3dSmrg static constexpr bool is_signed = __glibcxx_signed (char32_t); 8751debfc3dSmrg static constexpr bool is_integer = true; 8761debfc3dSmrg static constexpr bool is_exact = true; 8771debfc3dSmrg static constexpr int radix = 2; 8781debfc3dSmrg 8791debfc3dSmrg static constexpr char32_t 8801debfc3dSmrg epsilon() noexcept { return 0; } 8811debfc3dSmrg 8821debfc3dSmrg static constexpr char32_t 8831debfc3dSmrg round_error() noexcept { return 0; } 8841debfc3dSmrg 8851debfc3dSmrg static constexpr int min_exponent = 0; 8861debfc3dSmrg static constexpr int min_exponent10 = 0; 8871debfc3dSmrg static constexpr int max_exponent = 0; 8881debfc3dSmrg static constexpr int max_exponent10 = 0; 8891debfc3dSmrg 8901debfc3dSmrg static constexpr bool has_infinity = false; 8911debfc3dSmrg static constexpr bool has_quiet_NaN = false; 8921debfc3dSmrg static constexpr bool has_signaling_NaN = false; 8931debfc3dSmrg static constexpr float_denorm_style has_denorm = denorm_absent; 8941debfc3dSmrg static constexpr bool has_denorm_loss = false; 8951debfc3dSmrg 8961debfc3dSmrg static constexpr char32_t 8971debfc3dSmrg infinity() noexcept { return char32_t(); } 8981debfc3dSmrg 8991debfc3dSmrg static constexpr char32_t 9001debfc3dSmrg quiet_NaN() noexcept { return char32_t(); } 9011debfc3dSmrg 9021debfc3dSmrg static constexpr char32_t 9031debfc3dSmrg signaling_NaN() noexcept { return char32_t(); } 9041debfc3dSmrg 9051debfc3dSmrg static constexpr char32_t 9061debfc3dSmrg denorm_min() noexcept { return char32_t(); } 9071debfc3dSmrg 9081debfc3dSmrg static constexpr bool is_iec559 = false; 9091debfc3dSmrg static constexpr bool is_bounded = true; 9101debfc3dSmrg static constexpr bool is_modulo = !is_signed; 9111debfc3dSmrg 9121debfc3dSmrg static constexpr bool traps = __glibcxx_integral_traps; 9131debfc3dSmrg static constexpr bool tinyness_before = false; 9141debfc3dSmrg static constexpr float_round_style round_style = round_toward_zero; 9151debfc3dSmrg }; 9161debfc3dSmrg#endif 9171debfc3dSmrg 9181debfc3dSmrg /// numeric_limits<short> specialization. 9191debfc3dSmrg template<> 9201debfc3dSmrg struct numeric_limits<short> 9211debfc3dSmrg { 9221debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 9231debfc3dSmrg 9241debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9251debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; } 9261debfc3dSmrg 9271debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9281debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; } 9291debfc3dSmrg 9301debfc3dSmrg#if __cplusplus >= 201103L 9311debfc3dSmrg static constexpr short 9321debfc3dSmrg lowest() noexcept { return min(); } 9331debfc3dSmrg#endif 9341debfc3dSmrg 9351debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short); 9361debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short); 9371debfc3dSmrg#if __cplusplus >= 201103L 9381debfc3dSmrg static constexpr int max_digits10 = 0; 9391debfc3dSmrg#endif 9401debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 9411debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 9421debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 9431debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 9441debfc3dSmrg 9451debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9461debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 9471debfc3dSmrg 9481debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9491debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 9501debfc3dSmrg 9511debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 9521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 9531debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 9541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 9551debfc3dSmrg 9561debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 9571debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 9581debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 9591debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 9601debfc3dSmrg = denorm_absent; 9611debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 9621debfc3dSmrg 9631debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9641debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return short(); } 9651debfc3dSmrg 9661debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9671debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 9681debfc3dSmrg 9691debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9701debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); } 9711debfc3dSmrg 9721debfc3dSmrg static _GLIBCXX_CONSTEXPR short 9731debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); } 9741debfc3dSmrg 9751debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 9761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 9771debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 9781debfc3dSmrg 9791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 9801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 9811debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 9821debfc3dSmrg = round_toward_zero; 9831debfc3dSmrg }; 9841debfc3dSmrg 9851debfc3dSmrg /// numeric_limits<unsigned short> specialization. 9861debfc3dSmrg template<> 9871debfc3dSmrg struct numeric_limits<unsigned short> 9881debfc3dSmrg { 9891debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 9901debfc3dSmrg 9911debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 9921debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 9931debfc3dSmrg 9941debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 9951debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; } 9961debfc3dSmrg 9971debfc3dSmrg#if __cplusplus >= 201103L 9981debfc3dSmrg static constexpr unsigned short 9991debfc3dSmrg lowest() noexcept { return min(); } 10001debfc3dSmrg#endif 10011debfc3dSmrg 10021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 10031debfc3dSmrg = __glibcxx_digits (unsigned short); 10041debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 10051debfc3dSmrg = __glibcxx_digits10 (unsigned short); 10061debfc3dSmrg#if __cplusplus >= 201103L 10071debfc3dSmrg static constexpr int max_digits10 = 0; 10081debfc3dSmrg#endif 10091debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 10101debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 10111debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 10121debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 10131debfc3dSmrg 10141debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10151debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 10161debfc3dSmrg 10171debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10181debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 10191debfc3dSmrg 10201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 10211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 10221debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 10231debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 10241debfc3dSmrg 10251debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 10261debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 10271debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 10281debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 10291debfc3dSmrg = denorm_absent; 10301debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 10311debfc3dSmrg 10321debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10331debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT 10341debfc3dSmrg { return static_cast<unsigned short>(0); } 10351debfc3dSmrg 10361debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10371debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 10381debfc3dSmrg { return static_cast<unsigned short>(0); } 10391debfc3dSmrg 10401debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10411debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 10421debfc3dSmrg { return static_cast<unsigned short>(0); } 10431debfc3dSmrg 10441debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned short 10451debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 10461debfc3dSmrg { return static_cast<unsigned short>(0); } 10471debfc3dSmrg 10481debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 10491debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 10501debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 10511debfc3dSmrg 10521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 10531debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 10541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 10551debfc3dSmrg = round_toward_zero; 10561debfc3dSmrg }; 10571debfc3dSmrg 10581debfc3dSmrg /// numeric_limits<int> specialization. 10591debfc3dSmrg template<> 10601debfc3dSmrg struct numeric_limits<int> 10611debfc3dSmrg { 10621debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 10631debfc3dSmrg 10641debfc3dSmrg static _GLIBCXX_CONSTEXPR int 10651debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; } 10661debfc3dSmrg 10671debfc3dSmrg static _GLIBCXX_CONSTEXPR int 10681debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; } 10691debfc3dSmrg 10701debfc3dSmrg#if __cplusplus >= 201103L 10711debfc3dSmrg static constexpr int 10721debfc3dSmrg lowest() noexcept { return min(); } 10731debfc3dSmrg#endif 10741debfc3dSmrg 10751debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int); 10761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int); 10771debfc3dSmrg#if __cplusplus >= 201103L 10781debfc3dSmrg static constexpr int max_digits10 = 0; 10791debfc3dSmrg#endif 10801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 10811debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 10821debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 10831debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 10841debfc3dSmrg 10851debfc3dSmrg static _GLIBCXX_CONSTEXPR int 10861debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 10871debfc3dSmrg 10881debfc3dSmrg static _GLIBCXX_CONSTEXPR int 10891debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 10901debfc3dSmrg 10911debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 10921debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 10931debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 10941debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 10951debfc3dSmrg 10961debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 10971debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 10981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 10991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 11001debfc3dSmrg = denorm_absent; 11011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 11021debfc3dSmrg 11031debfc3dSmrg static _GLIBCXX_CONSTEXPR int 11041debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 11051debfc3dSmrg 11061debfc3dSmrg static _GLIBCXX_CONSTEXPR int 11071debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 11081debfc3dSmrg 11091debfc3dSmrg static _GLIBCXX_CONSTEXPR int 11101debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 11111debfc3dSmrg 11121debfc3dSmrg static _GLIBCXX_CONSTEXPR int 11131debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); } 11141debfc3dSmrg 11151debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 11161debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 11171debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 11181debfc3dSmrg 11191debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 11201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 11211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 11221debfc3dSmrg = round_toward_zero; 11231debfc3dSmrg }; 11241debfc3dSmrg 11251debfc3dSmrg /// numeric_limits<unsigned int> specialization. 11261debfc3dSmrg template<> 11271debfc3dSmrg struct numeric_limits<unsigned int> 11281debfc3dSmrg { 11291debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 11301debfc3dSmrg 11311debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11321debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 11331debfc3dSmrg 11341debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11351debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; } 11361debfc3dSmrg 11371debfc3dSmrg#if __cplusplus >= 201103L 11381debfc3dSmrg static constexpr unsigned int 11391debfc3dSmrg lowest() noexcept { return min(); } 11401debfc3dSmrg#endif 11411debfc3dSmrg 11421debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 11431debfc3dSmrg = __glibcxx_digits (unsigned int); 11441debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 11451debfc3dSmrg = __glibcxx_digits10 (unsigned int); 11461debfc3dSmrg#if __cplusplus >= 201103L 11471debfc3dSmrg static constexpr int max_digits10 = 0; 11481debfc3dSmrg#endif 11491debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 11501debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 11511debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 11521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 11531debfc3dSmrg 11541debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11551debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 11561debfc3dSmrg 11571debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11581debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 11591debfc3dSmrg 11601debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 11611debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 11621debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 11631debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 11641debfc3dSmrg 11651debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 11661debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 11671debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 11681debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 11691debfc3dSmrg = denorm_absent; 11701debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 11711debfc3dSmrg 11721debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11731debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); } 11741debfc3dSmrg 11751debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11761debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 11771debfc3dSmrg { return static_cast<unsigned int>(0); } 11781debfc3dSmrg 11791debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11801debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 11811debfc3dSmrg { return static_cast<unsigned int>(0); } 11821debfc3dSmrg 11831debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned int 11841debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 11851debfc3dSmrg { return static_cast<unsigned int>(0); } 11861debfc3dSmrg 11871debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 11881debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 11891debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 11901debfc3dSmrg 11911debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 11921debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 11931debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 11941debfc3dSmrg = round_toward_zero; 11951debfc3dSmrg }; 11961debfc3dSmrg 11971debfc3dSmrg /// numeric_limits<long> specialization. 11981debfc3dSmrg template<> 11991debfc3dSmrg struct numeric_limits<long> 12001debfc3dSmrg { 12011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 12021debfc3dSmrg 12031debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12041debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; } 12051debfc3dSmrg 12061debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12071debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; } 12081debfc3dSmrg 12091debfc3dSmrg#if __cplusplus >= 201103L 12101debfc3dSmrg static constexpr long 12111debfc3dSmrg lowest() noexcept { return min(); } 12121debfc3dSmrg#endif 12131debfc3dSmrg 12141debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long); 12151debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long); 12161debfc3dSmrg#if __cplusplus >= 201103L 12171debfc3dSmrg static constexpr int max_digits10 = 0; 12181debfc3dSmrg#endif 12191debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 12201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 12211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 12221debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 12231debfc3dSmrg 12241debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12251debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 12261debfc3dSmrg 12271debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12281debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 12291debfc3dSmrg 12301debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 12311debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 12321debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 12331debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 12341debfc3dSmrg 12351debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 12361debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 12371debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 12381debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 12391debfc3dSmrg = denorm_absent; 12401debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 12411debfc3dSmrg 12421debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12431debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 12441debfc3dSmrg 12451debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12461debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 12471debfc3dSmrg 12481debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12491debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 12501debfc3dSmrg 12511debfc3dSmrg static _GLIBCXX_CONSTEXPR long 12521debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); } 12531debfc3dSmrg 12541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 12551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 12561debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 12571debfc3dSmrg 12581debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 12591debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 12601debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 12611debfc3dSmrg = round_toward_zero; 12621debfc3dSmrg }; 12631debfc3dSmrg 12641debfc3dSmrg /// numeric_limits<unsigned long> specialization. 12651debfc3dSmrg template<> 12661debfc3dSmrg struct numeric_limits<unsigned long> 12671debfc3dSmrg { 12681debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 12691debfc3dSmrg 12701debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 12711debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 12721debfc3dSmrg 12731debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 12741debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; } 12751debfc3dSmrg 12761debfc3dSmrg#if __cplusplus >= 201103L 12771debfc3dSmrg static constexpr unsigned long 12781debfc3dSmrg lowest() noexcept { return min(); } 12791debfc3dSmrg#endif 12801debfc3dSmrg 12811debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 12821debfc3dSmrg = __glibcxx_digits (unsigned long); 12831debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 12841debfc3dSmrg = __glibcxx_digits10 (unsigned long); 12851debfc3dSmrg#if __cplusplus >= 201103L 12861debfc3dSmrg static constexpr int max_digits10 = 0; 12871debfc3dSmrg#endif 12881debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 12891debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 12901debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 12911debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 12921debfc3dSmrg 12931debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 12941debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 12951debfc3dSmrg 12961debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 12971debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 12981debfc3dSmrg 12991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 13001debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 13011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 13021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 13031debfc3dSmrg 13041debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 13051debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 13061debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 13071debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 13081debfc3dSmrg = denorm_absent; 13091debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 13101debfc3dSmrg 13111debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 13121debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT 13131debfc3dSmrg { return static_cast<unsigned long>(0); } 13141debfc3dSmrg 13151debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 13161debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 13171debfc3dSmrg { return static_cast<unsigned long>(0); } 13181debfc3dSmrg 13191debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 13201debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 13211debfc3dSmrg { return static_cast<unsigned long>(0); } 13221debfc3dSmrg 13231debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long 13241debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 13251debfc3dSmrg { return static_cast<unsigned long>(0); } 13261debfc3dSmrg 13271debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 13281debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 13291debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 13301debfc3dSmrg 13311debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 13321debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 13331debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 13341debfc3dSmrg = round_toward_zero; 13351debfc3dSmrg }; 13361debfc3dSmrg 13371debfc3dSmrg /// numeric_limits<long long> specialization. 13381debfc3dSmrg template<> 13391debfc3dSmrg struct numeric_limits<long long> 13401debfc3dSmrg { 13411debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 13421debfc3dSmrg 13431debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13441debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; } 13451debfc3dSmrg 13461debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13471debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; } 13481debfc3dSmrg 13491debfc3dSmrg#if __cplusplus >= 201103L 13501debfc3dSmrg static constexpr long long 13511debfc3dSmrg lowest() noexcept { return min(); } 13521debfc3dSmrg#endif 13531debfc3dSmrg 13541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 13551debfc3dSmrg = __glibcxx_digits (long long); 13561debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 13571debfc3dSmrg = __glibcxx_digits10 (long long); 13581debfc3dSmrg#if __cplusplus >= 201103L 13591debfc3dSmrg static constexpr int max_digits10 = 0; 13601debfc3dSmrg#endif 13611debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 13621debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 13631debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 13641debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 13651debfc3dSmrg 13661debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13671debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 13681debfc3dSmrg 13691debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13701debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 13711debfc3dSmrg 13721debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 13731debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 13741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 13751debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 13761debfc3dSmrg 13771debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 13781debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 13791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 13801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 13811debfc3dSmrg = denorm_absent; 13821debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 13831debfc3dSmrg 13841debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13851debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 13861debfc3dSmrg 13871debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13881debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 13891debfc3dSmrg 13901debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13911debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 13921debfc3dSmrg { return static_cast<long long>(0); } 13931debfc3dSmrg 13941debfc3dSmrg static _GLIBCXX_CONSTEXPR long long 13951debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); } 13961debfc3dSmrg 13971debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 13981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 13991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 14001debfc3dSmrg 14011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 14021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 14031debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 14041debfc3dSmrg = round_toward_zero; 14051debfc3dSmrg }; 14061debfc3dSmrg 14071debfc3dSmrg /// numeric_limits<unsigned long long> specialization. 14081debfc3dSmrg template<> 14091debfc3dSmrg struct numeric_limits<unsigned long long> 14101debfc3dSmrg { 14111debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 14121debfc3dSmrg 14131debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14141debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } 14151debfc3dSmrg 14161debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14171debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; } 14181debfc3dSmrg 14191debfc3dSmrg#if __cplusplus >= 201103L 14201debfc3dSmrg static constexpr unsigned long long 14211debfc3dSmrg lowest() noexcept { return min(); } 14221debfc3dSmrg#endif 14231debfc3dSmrg 14241debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits 14251debfc3dSmrg = __glibcxx_digits (unsigned long long); 14261debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 14271debfc3dSmrg = __glibcxx_digits10 (unsigned long long); 14281debfc3dSmrg#if __cplusplus >= 201103L 14291debfc3dSmrg static constexpr int max_digits10 = 0; 14301debfc3dSmrg#endif 14311debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 14321debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 14331debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 14341debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; 14351debfc3dSmrg 14361debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14371debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 14381debfc3dSmrg 14391debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14401debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 14411debfc3dSmrg 14421debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 14431debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 14441debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 14451debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 14461debfc3dSmrg 14471debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 14481debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 14491debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 14501debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 14511debfc3dSmrg = denorm_absent; 14521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 14531debfc3dSmrg 14541debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14551debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT 14561debfc3dSmrg { return static_cast<unsigned long long>(0); } 14571debfc3dSmrg 14581debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14591debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT 14601debfc3dSmrg { return static_cast<unsigned long long>(0); } 14611debfc3dSmrg 14621debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14631debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT 14641debfc3dSmrg { return static_cast<unsigned long long>(0); } 14651debfc3dSmrg 14661debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned long long 14671debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT 14681debfc3dSmrg { return static_cast<unsigned long long>(0); } 14691debfc3dSmrg 14701debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 14711debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 14721debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 14731debfc3dSmrg 14741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 14751debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 14761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 14771debfc3dSmrg = round_toward_zero; 14781debfc3dSmrg }; 14791debfc3dSmrg 14801debfc3dSmrg#define __INT_N(TYPE, BITSIZE, EXT, UEXT) \ 14811debfc3dSmrg template<> \ 14821debfc3dSmrg struct numeric_limits<TYPE> \ 14831debfc3dSmrg { \ 14841debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ 14851debfc3dSmrg \ 14861debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 14871debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \ 14881debfc3dSmrg \ 14891debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 14901debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \ 14911debfc3dSmrg \ 14921debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits \ 14931debfc3dSmrg = BITSIZE - 1; \ 14941debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 \ 14951debfc3dSmrg = (BITSIZE - 1) * 643L / 2136; \ 14961debfc3dSmrg \ 14971debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; \ 14981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ 14991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ 15001debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ 15011debfc3dSmrg \ 15021debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15031debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15041debfc3dSmrg \ 15051debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15061debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15071debfc3dSmrg \ 15081debfc3dSmrg EXT \ 15091debfc3dSmrg \ 15101debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ 15111debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ 15121debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ 15131debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ 15141debfc3dSmrg \ 15151debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ 15161debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ 15171debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ 15181debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ 15191debfc3dSmrg = denorm_absent; \ 15201debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ 15211debfc3dSmrg \ 15221debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15231debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT \ 15241debfc3dSmrg { return static_cast<TYPE>(0); } \ 15251debfc3dSmrg \ 15261debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15271debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ 15281debfc3dSmrg { return static_cast<TYPE>(0); } \ 15291debfc3dSmrg \ 15301debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15311debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ 15321debfc3dSmrg { return static_cast<TYPE>(0); } \ 15331debfc3dSmrg \ 15341debfc3dSmrg static _GLIBCXX_CONSTEXPR TYPE \ 15351debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT \ 15361debfc3dSmrg { return static_cast<TYPE>(0); } \ 15371debfc3dSmrg \ 15381debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ 15391debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ 15401debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \ 15411debfc3dSmrg \ 15421debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps \ 15431debfc3dSmrg = __glibcxx_integral_traps; \ 15441debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ 15451debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ 15461debfc3dSmrg = round_toward_zero; \ 15471debfc3dSmrg }; \ 15481debfc3dSmrg \ 15491debfc3dSmrg template<> \ 15501debfc3dSmrg struct numeric_limits<unsigned TYPE> \ 15511debfc3dSmrg { \ 15521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; \ 15531debfc3dSmrg \ 15541debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15551debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15561debfc3dSmrg \ 15571debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15581debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT \ 15591debfc3dSmrg { return __glibcxx_max_b (unsigned TYPE, BITSIZE); } \ 15601debfc3dSmrg \ 15611debfc3dSmrg UEXT \ 15621debfc3dSmrg \ 15631debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits \ 15641debfc3dSmrg = BITSIZE; \ 15651debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 \ 15661debfc3dSmrg = BITSIZE * 643L / 2136; \ 15671debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; \ 15681debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; \ 15691debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; \ 15701debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = 2; \ 15711debfc3dSmrg \ 15721debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15731debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15741debfc3dSmrg \ 15751debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15761debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } \ 15771debfc3dSmrg \ 15781debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; \ 15791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; \ 15801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; \ 15811debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; \ 15821debfc3dSmrg \ 15831debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \ 15841debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; \ 15851debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \ 15861debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \ 15871debfc3dSmrg = denorm_absent; \ 15881debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \ 15891debfc3dSmrg \ 15901debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15911debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT \ 15921debfc3dSmrg { return static_cast<unsigned TYPE>(0); } \ 15931debfc3dSmrg \ 15941debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15951debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT \ 15961debfc3dSmrg { return static_cast<unsigned TYPE>(0); } \ 15971debfc3dSmrg \ 15981debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 15991debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT \ 16001debfc3dSmrg { return static_cast<unsigned TYPE>(0); } \ 16011debfc3dSmrg \ 16021debfc3dSmrg static _GLIBCXX_CONSTEXPR unsigned TYPE \ 16031debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT \ 16041debfc3dSmrg { return static_cast<unsigned TYPE>(0); } \ 16051debfc3dSmrg \ 16061debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; \ 16071debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \ 16081debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; \ 16091debfc3dSmrg \ 16101debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \ 16111debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; \ 16121debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style \ 16131debfc3dSmrg = round_toward_zero; \ 16141debfc3dSmrg }; 16151debfc3dSmrg 16161debfc3dSmrg#if __cplusplus >= 201103L 16171debfc3dSmrg 16181debfc3dSmrg#define __INT_N_201103(TYPE) \ 16191debfc3dSmrg static constexpr TYPE \ 16201debfc3dSmrg lowest() noexcept { return min(); } \ 16211debfc3dSmrg static constexpr int max_digits10 = 0; 16221debfc3dSmrg 16231debfc3dSmrg#define __INT_N_U201103(TYPE) \ 16241debfc3dSmrg static constexpr unsigned TYPE \ 16251debfc3dSmrg lowest() noexcept { return min(); } \ 16261debfc3dSmrg static constexpr int max_digits10 = 0; 16271debfc3dSmrg 16281debfc3dSmrg#else 16291debfc3dSmrg#define __INT_N_201103(TYPE) 16301debfc3dSmrg#define __INT_N_U201103(TYPE) 16311debfc3dSmrg#endif 16321debfc3dSmrg 1633*8feb0f0bSmrg#if !defined(__STRICT_ANSI__) 16341debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_0 16351debfc3dSmrg __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0, 16361debfc3dSmrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0)) 16371debfc3dSmrg#endif 16381debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_1 16391debfc3dSmrg __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1, 16401debfc3dSmrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1)) 16411debfc3dSmrg#endif 16421debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_2 16431debfc3dSmrg __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2, 16441debfc3dSmrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2)) 16451debfc3dSmrg#endif 16461debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_3 16471debfc3dSmrg __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3, 16481debfc3dSmrg __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3)) 16491debfc3dSmrg#endif 16501debfc3dSmrg 1651*8feb0f0bSmrg#elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__ 1652*8feb0f0bSmrg __INT_N(__int128, 128, 1653*8feb0f0bSmrg __INT_N_201103 (__int128), 1654*8feb0f0bSmrg __INT_N_U201103 (__int128)) 1655*8feb0f0bSmrg#endif 1656*8feb0f0bSmrg 16571debfc3dSmrg#undef __INT_N 16581debfc3dSmrg#undef __INT_N_201103 16591debfc3dSmrg#undef __INT_N_U201103 16601debfc3dSmrg 16611debfc3dSmrg 16621debfc3dSmrg /// numeric_limits<float> specialization. 16631debfc3dSmrg template<> 16641debfc3dSmrg struct numeric_limits<float> 16651debfc3dSmrg { 16661debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 16671debfc3dSmrg 16681debfc3dSmrg static _GLIBCXX_CONSTEXPR float 16691debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; } 16701debfc3dSmrg 16711debfc3dSmrg static _GLIBCXX_CONSTEXPR float 16721debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; } 16731debfc3dSmrg 16741debfc3dSmrg#if __cplusplus >= 201103L 16751debfc3dSmrg static constexpr float 16761debfc3dSmrg lowest() noexcept { return -__FLT_MAX__; } 16771debfc3dSmrg#endif 16781debfc3dSmrg 16791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__; 16801debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__; 16811debfc3dSmrg#if __cplusplus >= 201103L 16821debfc3dSmrg static constexpr int max_digits10 16831debfc3dSmrg = __glibcxx_max_digits10 (__FLT_MANT_DIG__); 16841debfc3dSmrg#endif 16851debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 16861debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 16871debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 16881debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 16891debfc3dSmrg 16901debfc3dSmrg static _GLIBCXX_CONSTEXPR float 16911debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; } 16921debfc3dSmrg 16931debfc3dSmrg static _GLIBCXX_CONSTEXPR float 16941debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; } 16951debfc3dSmrg 16961debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__; 16971debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__; 16981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__; 16991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__; 17001debfc3dSmrg 17011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__; 17021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__; 17031debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 17041debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 17051debfc3dSmrg = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent; 17061debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 17071debfc3dSmrg = __glibcxx_float_has_denorm_loss; 17081debfc3dSmrg 17091debfc3dSmrg static _GLIBCXX_CONSTEXPR float 17101debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); } 17111debfc3dSmrg 17121debfc3dSmrg static _GLIBCXX_CONSTEXPR float 17131debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); } 17141debfc3dSmrg 17151debfc3dSmrg static _GLIBCXX_CONSTEXPR float 17161debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); } 17171debfc3dSmrg 17181debfc3dSmrg static _GLIBCXX_CONSTEXPR float 17191debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; } 17201debfc3dSmrg 17211debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 17221debfc3dSmrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 17231debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 17241debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 17251debfc3dSmrg 17261debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps; 17271debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 17281debfc3dSmrg = __glibcxx_float_tinyness_before; 17291debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 17301debfc3dSmrg = round_to_nearest; 17311debfc3dSmrg }; 17321debfc3dSmrg 17331debfc3dSmrg#undef __glibcxx_float_has_denorm_loss 17341debfc3dSmrg#undef __glibcxx_float_traps 17351debfc3dSmrg#undef __glibcxx_float_tinyness_before 17361debfc3dSmrg 17371debfc3dSmrg /// numeric_limits<double> specialization. 17381debfc3dSmrg template<> 17391debfc3dSmrg struct numeric_limits<double> 17401debfc3dSmrg { 17411debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 17421debfc3dSmrg 17431debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17441debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; } 17451debfc3dSmrg 17461debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17471debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; } 17481debfc3dSmrg 17491debfc3dSmrg#if __cplusplus >= 201103L 17501debfc3dSmrg static constexpr double 17511debfc3dSmrg lowest() noexcept { return -__DBL_MAX__; } 17521debfc3dSmrg#endif 17531debfc3dSmrg 17541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__; 17551debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__; 17561debfc3dSmrg#if __cplusplus >= 201103L 17571debfc3dSmrg static constexpr int max_digits10 17581debfc3dSmrg = __glibcxx_max_digits10 (__DBL_MANT_DIG__); 17591debfc3dSmrg#endif 17601debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 17611debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 17621debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 17631debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 17641debfc3dSmrg 17651debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17661debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; } 17671debfc3dSmrg 17681debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17691debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; } 17701debfc3dSmrg 17711debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__; 17721debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__; 17731debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__; 17741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__; 17751debfc3dSmrg 17761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__; 17771debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__; 17781debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 17791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 17801debfc3dSmrg = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent; 17811debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 17821debfc3dSmrg = __glibcxx_double_has_denorm_loss; 17831debfc3dSmrg 17841debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17851debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); } 17861debfc3dSmrg 17871debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17881debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); } 17891debfc3dSmrg 17901debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17911debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); } 17921debfc3dSmrg 17931debfc3dSmrg static _GLIBCXX_CONSTEXPR double 17941debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; } 17951debfc3dSmrg 17961debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 17971debfc3dSmrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 17981debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 17991debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 18001debfc3dSmrg 18011debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps; 18021debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 18031debfc3dSmrg = __glibcxx_double_tinyness_before; 18041debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 18051debfc3dSmrg = round_to_nearest; 18061debfc3dSmrg }; 18071debfc3dSmrg 18081debfc3dSmrg#undef __glibcxx_double_has_denorm_loss 18091debfc3dSmrg#undef __glibcxx_double_traps 18101debfc3dSmrg#undef __glibcxx_double_tinyness_before 18111debfc3dSmrg 18121debfc3dSmrg /// numeric_limits<long double> specialization. 18131debfc3dSmrg template<> 18141debfc3dSmrg struct numeric_limits<long double> 18151debfc3dSmrg { 18161debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 18171debfc3dSmrg 18181debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18191debfc3dSmrg min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; } 18201debfc3dSmrg 18211debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18221debfc3dSmrg max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; } 18231debfc3dSmrg 18241debfc3dSmrg#if __cplusplus >= 201103L 18251debfc3dSmrg static constexpr long double 18261debfc3dSmrg lowest() noexcept { return -__LDBL_MAX__; } 18271debfc3dSmrg#endif 18281debfc3dSmrg 18291debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__; 18301debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__; 18311debfc3dSmrg#if __cplusplus >= 201103L 18321debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_digits10 18331debfc3dSmrg = __glibcxx_max_digits10 (__LDBL_MANT_DIG__); 18341debfc3dSmrg#endif 18351debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 18361debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_integer = false; 18371debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_exact = false; 18381debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__; 18391debfc3dSmrg 18401debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18411debfc3dSmrg epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; } 18421debfc3dSmrg 18431debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18441debfc3dSmrg round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; } 18451debfc3dSmrg 18461debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__; 18471debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__; 18481debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__; 18491debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__; 18501debfc3dSmrg 18511debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__; 18521debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__; 18531debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN; 18541debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 18551debfc3dSmrg = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent; 18561debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 18571debfc3dSmrg = __glibcxx_long_double_has_denorm_loss; 18581debfc3dSmrg 18591debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18601debfc3dSmrg infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); } 18611debfc3dSmrg 18621debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18631debfc3dSmrg quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); } 18641debfc3dSmrg 18651debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18661debfc3dSmrg signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); } 18671debfc3dSmrg 18681debfc3dSmrg static _GLIBCXX_CONSTEXPR long double 18691debfc3dSmrg denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; } 18701debfc3dSmrg 18711debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_iec559 18721debfc3dSmrg = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 18731debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 18741debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 18751debfc3dSmrg 18761debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps; 18771debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 18781debfc3dSmrg __glibcxx_long_double_tinyness_before; 18791debfc3dSmrg static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 18801debfc3dSmrg round_to_nearest; 18811debfc3dSmrg }; 18821debfc3dSmrg 18831debfc3dSmrg#undef __glibcxx_long_double_has_denorm_loss 18841debfc3dSmrg#undef __glibcxx_long_double_traps 18851debfc3dSmrg#undef __glibcxx_long_double_tinyness_before 18861debfc3dSmrg 18871debfc3dSmrg_GLIBCXX_END_NAMESPACE_VERSION 18881debfc3dSmrg} // namespace 18891debfc3dSmrg 18901debfc3dSmrg#undef __glibcxx_signed 18911debfc3dSmrg#undef __glibcxx_min 18921debfc3dSmrg#undef __glibcxx_max 18931debfc3dSmrg#undef __glibcxx_digits 18941debfc3dSmrg#undef __glibcxx_digits10 18951debfc3dSmrg#undef __glibcxx_max_digits10 18961debfc3dSmrg 18971debfc3dSmrg#endif // _GLIBCXX_NUMERIC_LIMITS 1898