| // The template and inlines for the -*- C++ -*- numeric_limits classes. | |
| // Copyright (C) 1999-2001 Free Software Foundation, Inc. | |
| // | |
| // This file is part of the GNU ISO C++ Library. This library is free | |
| // software; you can redistribute it and/or modify it under the | |
| // terms of the GNU General Public License as published by the | |
| // Free Software Foundation; either version 2, or (at your option) | |
| // any later version. | |
| // This library is distributed in the hope that it will be useful, | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| // GNU General Public License for more details. | |
| // You should have received a copy of the GNU General Public License along | |
| // with this library; see the file COPYING. If not, write to the Free | |
| // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |
| // USA. | |
| // As a special exception, you may use this file as part of a free software | |
| // library without restriction. Specifically, if other files instantiate | |
| // templates or use macros or inline functions from this file, or you compile | |
| // this file and link it with other files to produce an executable, this | |
| // file does not by itself cause the resulting executable to be covered by | |
| // the GNU General Public License. This exception does not however | |
| // invalidate any other reasons why the executable file might be covered by | |
| // the GNU General Public License. | |
| // Note: this is not a conforming implementation. | |
| // Written by Gabriel Dos Reis <gdr@codesourcery.com> | |
| // | |
| // ISO 14882:1998 | |
| // 18.2.1 | |
| // | |
| /** @file std_limits.h | |
| * This is an internal header file, included by other library headers. | |
| * You should not attempt to use it directly. | |
| */ | |
| #ifndef _CPP_NUMERIC_LIMITS | |
| #define _CPP_NUMERIC_LIMITS 1 | |
| #pragma GCC system_header | |
| #include <bits/cpu_limits.h> | |
| #include <bits/c++config.h> | |
| // | |
| // The numeric_limits<> traits document implementation-defined aspects | |
| // of fundamental arithmetic data types (integers and floating points). | |
| // From Standard C++ point of view, there are 13 such types: | |
| // * integers | |
| // bool (1) | |
| // char, signed char, unsigned char (3) | |
| // short, unsigned short (2) | |
| // int, unsigned (2) | |
| // long, unsigned long (2) | |
| // | |
| // * floating points | |
| // float (1) | |
| // double (1) | |
| // long double (1) | |
| // | |
| // GNU C++ undertstands (where supported by the host C-library) | |
| // * integer | |
| // long long, unsigned long long (2) | |
| // | |
| // which brings us to 15 fundamental arithmetic data types in GNU C++. | |
| // | |
| // | |
| // Since a numeric_limits<> is a bit tricky to get right, we rely on | |
| // an interface composed of macros which should be defined in config/os | |
| // or config/cpu when they differ from the generic (read arbitrary) | |
| // definitions given here. | |
| // | |
| // These values can be overridden in the target configuration file. | |
| // The default values are appropriate for many 32-bit targets. | |
| #ifndef __glibcpp_char_bits | |
| #define __glibcpp_char_bits 8 | |
| #endif | |
| #ifdef __CHAR_UNSIGNED__ | |
| #define __glibcpp_plain_char_is_signed false | |
| #else | |
| #define __glibcpp_plain_char_is_signed true | |
| #endif | |
| #ifndef __glibcpp_short_bits | |
| #define __glibcpp_short_bits 16 | |
| #endif | |
| #ifndef __glibcpp_int_bits | |
| #define __glibcpp_int_bits 32 | |
| #endif | |
| #ifndef __glibcpp_long_bits | |
| #define __glibcpp_long_bits 32 | |
| #endif | |
| #ifndef __glibcpp_wchar_t_bits | |
| #define __glibcpp_wchar_t_bits 32 | |
| #endif | |
| #ifndef __glibcpp_wchar_t_is_signed | |
| #define __glibcpp_wchar_t_is_signed true | |
| #endif | |
| #ifndef __glibcpp_long_long_bits | |
| #define __glibcpp_long_long_bits 64 | |
| #endif | |
| #ifndef __glibcpp_float_bits | |
| #define __glibcpp_float_bits 32 | |
| #endif | |
| #ifndef __glibcpp_double_bits | |
| #define __glibcpp_double_bits 64 | |
| #endif | |
| #ifndef __glibcpp_long_double_bits | |
| #define __glibcpp_long_double_bits 128 | |
| #endif | |
| #ifndef __glibcpp_char_traps | |
| #define __glibcpp_char_traps true | |
| #endif | |
| #ifndef __glibcpp_short_traps | |
| #define __glibcpp_short_traps true | |
| #endif | |
| #ifndef __glibcpp_int_traps | |
| #define __glibcpp_int_traps true | |
| #endif | |
| #ifndef __glibcpp_long_traps | |
| #define __glibcpp_long_traps true | |
| #endif | |
| #ifndef __glibcpp_wchar_t_traps | |
| #define __glibcpp_wchar_t_traps true | |
| #endif | |
| #ifndef __glibcpp_long_long_traps | |
| #define __glibcpp_long_long_traps true | |
| #endif | |
| // You should not need to define any macros below this point, unless | |
| // you have a machine with non-standard bit-widths. | |
| // These values are the minimums and maximums for standard data types | |
| // of common widths. | |
| #define __glibcpp_s8_max 127 | |
| #define __glibcpp_s8_min (-__glibcpp_s8_max - 1) | |
| #define __glibcpp_s8_digits 7 | |
| #define __glibcpp_s8_digits10 2 | |
| #define __glibcpp_u8_min 0U | |
| #define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1) | |
| #define __glibcpp_u8_digits 8 | |
| #define __glibcpp_u8_digits10 2 | |
| #define __glibcpp_s16_max 32767 | |
| #define __glibcpp_s16_min (-__glibcpp_s16_max - 1) | |
| #define __glibcpp_s16_digits 15 | |
| #define __glibcpp_s16_digits10 4 | |
| #define __glibcpp_u16_min 0U | |
| #define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1) | |
| #define __glibcpp_u16_digits 16 | |
| #define __glibcpp_u16_digits10 4 | |
| #define __glibcpp_s32_max 2147483647L | |
| #define __glibcpp_s32_min (-__glibcpp_s32_max - 1) | |
| #define __glibcpp_s32_digits 31 | |
| #define __glibcpp_s32_digits10 9 | |
| #define __glibcpp_u32_min 0UL | |
| #define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1) | |
| #define __glibcpp_u32_digits 32 | |
| #define __glibcpp_u32_digits10 9 | |
| #define __glibcpp_s64_max 9223372036854775807LL | |
| #define __glibcpp_s64_min (-__glibcpp_s64_max - 1) | |
| #define __glibcpp_s64_digits 63 | |
| #define __glibcpp_s64_digits10 18 | |
| #define __glibcpp_u64_min 0ULL | |
| #define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1) | |
| #define __glibcpp_u64_digits 64 | |
| #define __glibcpp_u64_digits10 19 | |
| #define __glibcpp_f32_min 1.17549435e-38F | |
| #define __glibcpp_f32_max 3.40282347e+38F | |
| #define __glibcpp_f32_digits 24 | |
| #define __glibcpp_f32_digits10 6 | |
| #define __glibcpp_f32_radix 2 | |
| #define __glibcpp_f32_epsilon 1.19209290e-07F | |
| #define __glibcpp_f32_round_error 1.0F | |
| #define __glibcpp_f32_min_exponent -125 | |
| #define __glibcpp_f32_min_exponent10 -37 | |
| #define __glibcpp_f32_max_exponent 128 | |
| #define __glibcpp_f32_max_exponent10 38 | |
| #define __glibcpp_f64_min 2.2250738585072014e-308 | |
| #define __glibcpp_f64_max 1.7976931348623157e+308 | |
| #define __glibcpp_f64_digits 53 | |
| #define __glibcpp_f64_digits10 15 | |
| #define __glibcpp_f64_radix 2 | |
| #define __glibcpp_f64_epsilon 2.2204460492503131e-16 | |
| #define __glibcpp_f64_round_error 1.0 | |
| #define __glibcpp_f64_min_exponent -1021 | |
| #define __glibcpp_f64_min_exponent10 -307 | |
| #define __glibcpp_f64_max_exponent 1024 | |
| #define __glibcpp_f64_max_exponent10 308 | |
| #define __glibcpp_f80_min 3.36210314311209350626e-4932L | |
| #define __glibcpp_f80_max 1.18973149535723176502e+4932L | |
| #define __glibcpp_f80_digits 64 | |
| #define __glibcpp_f80_digits10 18 | |
| #define __glibcpp_f80_radix 2 | |
| #define __glibcpp_f80_epsilon 1.08420217248550443401e-19L | |
| #define __glibcpp_f80_round_error 1.0L | |
| #define __glibcpp_f80_min_exponent -16381 | |
| #define __glibcpp_f80_min_exponent10 -4931 | |
| #define __glibcpp_f80_max_exponent 16384 | |
| #define __glibcpp_f80_max_exponent10 4932 | |
| #define __glibcpp_f96_min 1.68105157155604675313e-4932L | |
| #define __glibcpp_f96_max 1.18973149535723176502e+4932L | |
| #define __glibcpp_f96_digits 64 | |
| #define __glibcpp_f96_digits10 18 | |
| #define __glibcpp_f96_radix 2 | |
| #define __glibcpp_f96_epsilon 1.08420217248550443401e-19L | |
| #define __glibcpp_f96_round_error 1.0L | |
| #define __glibcpp_f96_min_exponent -16382 | |
| #define __glibcpp_f96_min_exponent10 -4931 | |
| #define __glibcpp_f96_max_exponent 16384 | |
| #define __glibcpp_f96_max_exponent10 4932 | |
| #define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L | |
| #define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L | |
| #define __glibcpp_f128_digits 113 | |
| #define __glibcpp_f128_digits10 33 | |
| #define __glibcpp_f128_radix 2 | |
| #define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L | |
| #define __glibcpp_f128_round_error 1.0L | |
| #define __glibcpp_f128_min_exponent -16381 | |
| #define __glibcpp_f128_min_exponent10 -4931 | |
| #define __glibcpp_f128_max_exponent 16384 | |
| #define __glibcpp_f128_max_exponent10 4932 | |
| // bool-specific hooks: | |
| // __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps | |
| // This is actually CHAR_BITS because the new ABI says a bool | |
| // is one (1) byte wide. | |
| #ifndef __glibcpp_bool_digits | |
| #define __glibcpp_bool_digits __glibcpp_char_bits | |
| #endif | |
| // char. | |
| #define __glibcpp_plain_char_traps true | |
| #define __glibcpp_signed_char_traps true | |
| #define __glibcpp_unsigned_char_traps true | |
| #if __glibcpp_char_bits == 8 | |
| #define __glibcpp_signed_char_min __glibcpp_s8_min | |
| #define __glibcpp_signed_char_max __glibcpp_s8_max | |
| #define __glibcpp_signed_char_digits __glibcpp_s8_digits | |
| #define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10 | |
| #define __glibcpp_unsigned_char_min __glibcpp_u8_min | |
| #define __glibcpp_unsigned_char_max __glibcpp_u8_max | |
| #define __glibcpp_unsigned_char_digits __glibcpp_u8_digits | |
| #define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_char_bits == 16 | |
| #define __glibcpp_signed_char_min __glibcpp_s16_min | |
| #define __glibcpp_signed_char_max __glibcpp_s16_max | |
| #define __glibcpp_signed_char_digits __glibcpp_s16_digits | |
| #define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10 | |
| #define __glibcpp_unsigned_char_min __glibcpp_u16_min | |
| #define __glibcpp_unsigned_char_max __glibcpp_u16_max | |
| #define __glibcpp_unsigned_char_digits __glibcpp_u16_digits | |
| #define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_char_bits == 32 | |
| #define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min | |
| #define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max | |
| #define __glibcpp_signed_char_digits __glibcpp_s32_digits | |
| #define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10 | |
| #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min | |
| #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max | |
| #define __glibcpp_unsigned_char_digits __glibcpp_u32_digits | |
| #define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_char_bits == 64 | |
| #define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min | |
| #define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max | |
| #define __glibcpp_signed_char_digits __glibcpp_s64_digits | |
| #define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10 | |
| #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min | |
| #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max | |
| #define __glibcpp_unsigned_char_digits __glibcpp_u64_digits | |
| #define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| #if __glibcpp_plain_char_is_signed | |
| #define __glibcpp_char_min (char)__glibcpp_signed_char_min | |
| #define __glibcpp_char_max (char)__glibcpp_signed_char_max | |
| #define __glibcpp_char_digits __glibcpp_signed_char_digits | |
| #define __glibcpp_char_digits10 __glibcpp_signed_char_digits | |
| #else | |
| #define __glibcpp_char_min (char)__glibcpp_unsigned_char_min | |
| #define __glibcpp_char_max (char)__glibcpp_unsigned_char_max | |
| #define __glibcpp_char_digits __glibcpp_unsigned_char_digits | |
| #define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits | |
| #endif | |
| // short | |
| #define __glibcpp_signed_short_traps true | |
| #define __glibcpp_unsigned_short_traps true | |
| #if __glibcpp_short_bits == 8 | |
| #define __glibcpp_signed_short_min __glibcpp_s8_min | |
| #define __glibcpp_signed_short_max __glibcpp_s8_max | |
| #define __glibcpp_signed_short_digits __glibcpp_s8_digits | |
| #define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10 | |
| #define __glibcpp_unsigned_short_min __glibcpp_u8_min | |
| #define __glibcpp_unsigned_short_max __glibcpp_u8_max | |
| #define __glibcpp_unsigned_short_digits __glibcpp_u8_digits | |
| #define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_short_bits == 16 | |
| #define __glibcpp_signed_short_min __glibcpp_s16_min | |
| #define __glibcpp_signed_short_max __glibcpp_s16_max | |
| #define __glibcpp_signed_short_digits __glibcpp_s16_digits | |
| #define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10 | |
| #define __glibcpp_unsigned_short_min __glibcpp_u16_min | |
| #define __glibcpp_unsigned_short_max __glibcpp_u16_max | |
| #define __glibcpp_unsigned_short_digits __glibcpp_u16_digits | |
| #define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_short_bits == 32 | |
| #define __glibcpp_signed_short_min (short)__glibcpp_s32_min | |
| #define __glibcpp_signed_short_max (short)__glibcpp_s32_max | |
| #define __glibcpp_signed_short_digits __glibcpp_s32_digits | |
| #define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10 | |
| #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min | |
| #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max | |
| #define __glibcpp_unsigned_short_digits __glibcpp_u32_digits | |
| #define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_short_bits == 64 | |
| #define __glibcpp_signed_short_min (short)__glibcpp_s64_min | |
| #define __glibcpp_signed_short_max (short)__glibcpp_s64_max | |
| #define __glibcpp_signed_short_digits __glibcpp_s64_digits | |
| #define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10 | |
| #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min | |
| #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max | |
| #define __glibcpp_unsigned_short_digits __glibcpp_u64_digits | |
| #define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // int | |
| #define __glibcpp_signed_int_traps true | |
| #define __glibcpp_unsigned_int_traps true | |
| #if __glibcpp_int_bits == 8 | |
| #define __glibcpp_signed_int_min __glibcpp_s8_min | |
| #define __glibcpp_signed_int_max __glibcpp_s8_max | |
| #define __glibcpp_signed_int_digits __glibcpp_s8_digits | |
| #define __glibcpp_signed_int_digits10 __glibcpp_s8_digits10 | |
| #define __glibcpp_unsigned_int_min __glibcpp_u8_min | |
| #define __glibcpp_unsigned_int_max __glibcpp_u8_max | |
| #define __glibcpp_unsigned_int_digits __glibcpp_u8_digits | |
| #define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_int_bits == 16 | |
| #define __glibcpp_signed_int_min __glibcpp_s16_min | |
| #define __glibcpp_signed_int_max __glibcpp_s16_max | |
| #define __glibcpp_signed_int_digits __glibcpp_s16_digits | |
| #define __glibcpp_signed_int_digits10 __glibcpp_s16_digits10 | |
| #define __glibcpp_unsigned_int_min __glibcpp_u16_min | |
| #define __glibcpp_unsigned_int_max __glibcpp_u16_max | |
| #define __glibcpp_unsigned_int_digits __glibcpp_u16_digits | |
| #define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_int_bits == 32 | |
| #define __glibcpp_signed_int_min (int)__glibcpp_s32_min | |
| #define __glibcpp_signed_int_max (int)__glibcpp_s32_max | |
| #define __glibcpp_signed_int_digits __glibcpp_s32_digits | |
| #define __glibcpp_signed_int_digits10 __glibcpp_s32_digits10 | |
| #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u32_min | |
| #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max | |
| #define __glibcpp_unsigned_int_digits __glibcpp_u32_digits | |
| #define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_int_bits == 64 | |
| #define __glibcpp_signed_int_min (int)__glibcpp_s64_min | |
| #define __glibcpp_signed_int_max (int)__glibcpp_s64_max | |
| #define __glibcpp_signed_int_digits __glibcpp_s64_digits | |
| #define __glibcpp_signed_int_digits10 __glibcpp_s64_digits10 | |
| #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u64_min | |
| #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u64_max | |
| #define __glibcpp_unsigned_int_digits __glibcpp_u64_digits | |
| #define __glibcpp_unsigned_int_digits10 __glibcpp_u64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // long | |
| #define __glibcpp_signed_long_traps true | |
| #define __glibcpp_unsigned_long_traps true | |
| #if __glibcpp_long_bits == 8 | |
| #define __glibcpp_signed_long_min __glibcpp_s8_min | |
| #define __glibcpp_signed_long_max __glibcpp_s8_max | |
| #define __glibcpp_signed_long_digits __glibcpp_s8_digits | |
| #define __glibcpp_signed_long_digits10 __glibcpp_s8_digits10 | |
| #define __glibcpp_unsigned_long_min __glibcpp_u8_min | |
| #define __glibcpp_unsigned_long_max __glibcpp_u8_max | |
| #define __glibcpp_unsigned_long_digits __glibcpp_u8_digits | |
| #define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_long_bits == 16 | |
| #define __glibcpp_signed_long_min __glibcpp_s16_min | |
| #define __glibcpp_signed_long_max __glibcpp_s16_max | |
| #define __glibcpp_signed_long_digits __glibcpp_s16_digits | |
| #define __glibcpp_signed_long_digits10 __glibcpp_s16_digits10 | |
| #define __glibcpp_unsigned_long_min __glibcpp_u16_min | |
| #define __glibcpp_unsigned_long_max __glibcpp_u16_max | |
| #define __glibcpp_unsigned_long_digits __glibcpp_u16_digits | |
| #define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_long_bits == 32 | |
| #define __glibcpp_signed_long_min __glibcpp_s32_min | |
| #define __glibcpp_signed_long_max __glibcpp_s32_max | |
| #define __glibcpp_signed_long_digits __glibcpp_s32_digits | |
| #define __glibcpp_signed_long_digits10 __glibcpp_s32_digits10 | |
| #define __glibcpp_unsigned_long_min __glibcpp_u32_min | |
| #define __glibcpp_unsigned_long_max __glibcpp_u32_max | |
| #define __glibcpp_unsigned_long_digits __glibcpp_u32_digits | |
| #define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_long_bits == 64 | |
| #define __glibcpp_signed_long_min (long)__glibcpp_s64_min | |
| #define __glibcpp_signed_long_max (long)__glibcpp_s64_max | |
| #define __glibcpp_signed_long_digits __glibcpp_s64_digits | |
| #define __glibcpp_signed_long_digits10 __glibcpp_s64_digits10 | |
| #define __glibcpp_unsigned_long_min (unsigned long)__glibcpp_u64_min | |
| #define __glibcpp_unsigned_long_max (unsigned long)__glibcpp_u64_max | |
| #define __glibcpp_unsigned_long_digits __glibcpp_u64_digits | |
| #define __glibcpp_unsigned_long_digits10 __glibcpp_u64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // long long | |
| #define __glibcpp_signed_long_long_traps true | |
| #define __glibcpp_signed_long_long_traps true | |
| #if __glibcpp_long_long_bits == 8 | |
| #define __glibcpp_signed_long_long_min __glibcpp_s8_min | |
| #define __glibcpp_signed_long_long_max __glibcpp_s8_max | |
| #define __glibcpp_signed_long_long_digits __glibcpp_s8_digits | |
| #define __glibcpp_signed_long_long_digits10 __glibcpp_s8_digits10 | |
| #define __glibcpp_unsigned_long_long_min __glibcpp_u8_min | |
| #define __glibcpp_unsigned_long_long_max __glibcpp_u8_max | |
| #define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits | |
| #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_long_long_bits == 16 | |
| #define __glibcpp_signed_long_long_min __glibcpp_s16_min | |
| #define __glibcpp_signed_long_long_max __glibcpp_s16_max | |
| #define __glibcpp_signed_long_long_digits __glibcpp_s16_digits | |
| #define __glibcpp_signed_long_long_digits10 __glibcpp_s16_digits10 | |
| #define __glibcpp_unsigned_long_long_min __glibcpp_u16_min | |
| #define __glibcpp_unsigned_long_long_max __glibcpp_u16_max | |
| #define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits | |
| #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_long_long_bits == 32 | |
| #define __glibcpp_signed_long_long_min __glibcpp_s32_min | |
| #define __glibcpp_signed_long_long_max __glibcpp_s32_max | |
| #define __glibcpp_signed_long_long_digits __glibcpp_s32_digits | |
| #define __glibcpp_signed_long_long_digits10 __glibcpp_s32_digits10 | |
| #define __glibcpp_unsigned_long_long_min __glibcpp_u32_min | |
| #define __glibcpp_unsigned_long_long_max __glibcpp_u32_max | |
| #define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits | |
| #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_long_long_bits == 64 | |
| #define __glibcpp_signed_long_long_min __glibcpp_s64_min | |
| #define __glibcpp_signed_long_long_max __glibcpp_s64_max | |
| #define __glibcpp_signed_long_long_digits __glibcpp_s64_digits | |
| #define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10 | |
| #define __glibcpp_signed_long_long_traps true | |
| #define __glibcpp_unsigned_long_long_min __glibcpp_u64_min | |
| #define __glibcpp_unsigned_long_long_max __glibcpp_u64_max | |
| #define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits | |
| #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10 | |
| #define __glibcpp_unsigned_long_long_traps true | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // wchar_t | |
| #define __glibcpp_wchar_t_traps true | |
| #if __glibcpp_wchar_t_is_signed | |
| #if __glibcpp_wchar_t_bits == 8 | |
| #define __glibcpp_wchar_t_min __glibcpp_s8_min | |
| #define __glibcpp_wchar_t_max __glibcpp_s8_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_s8_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10 | |
| #elif __glibcpp_wchar_t_bits == 16 | |
| #define __glibcpp_wchar_t_min __glibcpp_s16_min | |
| #define __glibcpp_wchar_t_max __glibcpp_s16_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_s16_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10 | |
| #elif __glibcpp_wchar_t_bits == 32 | |
| #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min | |
| #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_s32_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10 | |
| #elif __glibcpp_wchar_t_bits == 64 | |
| #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min | |
| #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_s64_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_s64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| #else | |
| #if __glibcpp_wchar_t_bits == 8 | |
| #define __glibcpp_wchar_t_min __glibcpp_u8_min | |
| #define __glibcpp_wchar_t_max __glibcpp_u8_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_u8_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10 | |
| #elif __glibcpp_wchar_t_bits == 16 | |
| #define __glibcpp_wchar_t_min __glibcpp_u16_min | |
| #define __glibcpp_wchar_t_max __glibcpp_u16_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_u16_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10 | |
| #elif __glibcpp_wchar_t_bits == 32 | |
| #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min | |
| #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_u32_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10 | |
| #elif __glibcpp_wchar_t_bits == 64 | |
| #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min | |
| #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max | |
| #define __glibcpp_wchar_t_digits __glibcpp_u64_digits | |
| #define __glibcpp_wchar_t_digits10 __glibcpp_u64_digits10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| #endif | |
| // float | |
| // | |
| #if __glibcpp_float_bits == 32 | |
| #define __glibcpp_float_min __glibcpp_f32_min | |
| #define __glibcpp_float_max __glibcpp_f32_max | |
| #define __glibcpp_float_digits __glibcpp_f32_digits | |
| #define __glibcpp_float_digits10 __glibcpp_f32_digits10 | |
| #define __glibcpp_float_radix __glibcpp_f32_radix | |
| #define __glibcpp_float_epsilon __glibcpp_f32_epsilon | |
| #define __glibcpp_float_round_error __glibcpp_f32_round_error | |
| #define __glibcpp_float_min_exponent __glibcpp_f32_min_exponent | |
| #define __glibcpp_float_min_exponent10 __glibcpp_f32_min_exponent10 | |
| #define __glibcpp_float_max_exponent __glibcpp_f32_max_exponent | |
| #define __glibcpp_float_max_exponent10 __glibcpp_f32_max_exponent10 | |
| #elif __glibcpp_float_bits == 64 | |
| #define __glibcpp_float_min __glibcpp_f64_min | |
| #define __glibcpp_float_max __glibcpp_f64_max | |
| #define __glibcpp_float_digits __glibcpp_f64_digits | |
| #define __glibcpp_float_digits10 __glibcpp_f64_digits10 | |
| #define __glibcpp_float_radix __glibcpp_f64_radix | |
| #define __glibcpp_float_epsilon __glibcpp_f64_epsilon | |
| #define __glibcpp_float_round_error __glibcpp_f64_round_error | |
| #define __glibcpp_float_min_exponent __glibcpp_f64_min_exponent | |
| #define __glibcpp_float_min_exponent10 __glibcpp_f64_min_exponent10 | |
| #define __glibcpp_float_max_exponent __glibcpp_f64_max_exponent | |
| #define __glibcpp_float_max_exponent10 __glibcpp_f64_max_exponent10 | |
| #elif __glibcpp_float_bits == 80 | |
| #define __glibcpp_float_min __glibcpp_f80_min | |
| #define __glibcpp_float_max __glibcpp_f80_max | |
| #define __glibcpp_float_digits __glibcpp_f80_digits | |
| #define __glibcpp_float_digits10 __glibcpp_f80_digits10 | |
| #define __glibcpp_float_radix __glibcpp_f80_radix | |
| #define __glibcpp_float_epsilon __glibcpp_f80_epsilon | |
| #define __glibcpp_float_round_error __glibcpp_f80_round_error | |
| #define __glibcpp_float_min_exponent __glibcpp_f80_min_exponent | |
| #define __glibcpp_float_min_exponent10 __glibcpp_f80_min_exponent10 | |
| #define __glibcpp_float_max_exponent __glibcpp_f80_max_exponent | |
| #define __glibcpp_float_max_exponent10 __glibcpp_f80_max_exponent10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // FIXME: These are just stubs and inkorrect | |
| #ifndef __glibcpp_float_has_infinity | |
| #define __glibcpp_float_has_infinity false | |
| #endif | |
| #ifndef __glibcpp_float_has_quiet_NaM | |
| #define __glibcpp_float_has_quiet_NaN false | |
| #endif | |
| #ifndef __glibcpp_float_has_signaling_NaN | |
| #define __glibcpp_float_has_signaling_NaN false | |
| #endif | |
| #ifndef __glibcpp_float_has_denorm | |
| #define __glibcpp_float_has_denorm denorm_absent | |
| #endif | |
| #ifndef __glibcpp_float_has_denorm_loss | |
| #define __glibcpp_float_has_denorm_loss false | |
| #endif | |
| #ifndef __glibcpp_float_infinity | |
| #define __glibcpp_float_infinity 0.0F | |
| #endif | |
| #ifndef __glibcpp_float_quiet_NaN | |
| #define __glibcpp_float_quiet_NaN 0.0F | |
| #endif | |
| #ifndef __glibcpp_float_signaling_NaN | |
| #define __glibcpp_float_signaling_NaN 0.0F | |
| #endif | |
| #ifndef __glibcpp_float_denorm_min | |
| #define __glibcpp_float_denorm_min 0.0F | |
| #endif | |
| #ifndef __glibcpp_float_is_iec559 | |
| #define __glibcpp_float_is_iec559 false | |
| #endif | |
| #ifndef __glibcpp_float_is_bounded | |
| #define __glibcpp_float_is_bounded true | |
| #endif | |
| #ifndef __glibcpp_float_is_modulo | |
| #define __glibcpp_float_is_modulo false | |
| #endif | |
| #ifndef __glibcpp_float_traps | |
| #define __glibcpp_float_traps false | |
| #endif | |
| #ifndef __glibcpp_float_tinyness_before | |
| #define __glibcpp_float_tinyness_before false | |
| #endif | |
| #ifndef __glibcpp_float_round_style | |
| #define __glibcpp_float_round_style round_toward_zero | |
| #endif | |
| // double | |
| #if __glibcpp_double_bits == 32 | |
| #define __glibcpp_double_min __glibcpp_f32_min | |
| #define __glibcpp_double_max __glibcpp_f32_max | |
| #define __glibcpp_double_digits __glibcpp_f32_digits | |
| #define __glibcpp_double_digits10 __glibcpp_f32_digits10 | |
| #define __glibcpp_double_radix __glibcpp_f32_radix | |
| #define __glibcpp_double_epsilon __glibcpp_f32_epsilon | |
| #define __glibcpp_double_round_error __glibcpp_f32_round_error | |
| #define __glibcpp_double_min_exponent __glibcpp_f32_min_exponent | |
| #define __glibcpp_double_min_exponent10 __glibcpp_f32_min_exponent10 | |
| #define __glibcpp_double_max_exponent __glibcpp_f32_max_exponent | |
| #define __glibcpp_double_max_exponent10 __glibcpp_f32_max_exponent10 | |
| #elif __glibcpp_double_bits == 64 | |
| #define __glibcpp_double_min __glibcpp_f64_min | |
| #define __glibcpp_double_max __glibcpp_f64_max | |
| #define __glibcpp_double_digits __glibcpp_f64_digits | |
| #define __glibcpp_double_digits10 __glibcpp_f64_digits10 | |
| #define __glibcpp_double_radix __glibcpp_f64_radix | |
| #define __glibcpp_double_epsilon __glibcpp_f64_epsilon | |
| #define __glibcpp_double_round_error __glibcpp_f64_round_error | |
| #define __glibcpp_double_min_exponent __glibcpp_f64_min_exponent | |
| #define __glibcpp_double_min_exponent10 __glibcpp_f64_min_exponent10 | |
| #define __glibcpp_double_max_exponent __glibcpp_f64_max_exponent | |
| #define __glibcpp_double_max_exponent10 __glibcpp_f64_max_exponent10 | |
| #elif __glibcpp_double_bits == 80 | |
| #define __glibcpp_double_min __glibcpp_f80_min | |
| #define __glibcpp_double_max __glibcpp_f80_max | |
| #define __glibcpp_double_digits __glibcpp_f80_digits | |
| #define __glibcpp_double_digits10 __glibcpp_f80_digits10 | |
| #define __glibcpp_double_radix __glibcpp_f80_radix | |
| #define __glibcpp_double_epsilon __glibcpp_f80_epsilon | |
| #define __glibcpp_double_round_error __glibcpp_f80_round_error | |
| #define __glibcpp_double_min_exponent __glibcpp_f80_min_exponent | |
| #define __glibcpp_double_min_exponent10 __glibcpp_f80_min_exponent10 | |
| #define __glibcpp_double_max_exponent __glibcpp_f80_max_exponent | |
| #define __glibcpp_double_max_exponent10 __glibcpp_f80_max_exponent10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // FIXME: These are just stubs and inkorrect | |
| #ifndef __glibcpp_double_has_infinity | |
| #define __glibcpp_double_has_infinity false | |
| #endif | |
| #ifndef __glibcpp_double_has_quiet_NaM | |
| #define __glibcpp_double_has_quiet_NaN false | |
| #endif | |
| #ifndef __glibcpp_double_has_signaling_NaN | |
| #define __glibcpp_double_has_signaling_NaN false | |
| #endif | |
| #ifndef __glibcpp_double_has_denorm | |
| #define __glibcpp_double_has_denorm denorm_absent | |
| #endif | |
| #ifndef __glibcpp_double_has_denorm_loss | |
| #define __glibcpp_double_has_denorm_loss false | |
| #endif | |
| #ifndef __glibcpp_double_infinity | |
| #define __glibcpp_double_infinity 0.0 | |
| #endif | |
| #ifndef __glibcpp_double_quiet_NaN | |
| #define __glibcpp_double_quiet_NaN 0.0 | |
| #endif | |
| #ifndef __glibcpp_double_signaling_NaN | |
| #define __glibcpp_double_signaling_NaN 0.0 | |
| #endif | |
| #ifndef __glibcpp_double_denorm_min | |
| #define __glibcpp_double_denorm_min 0.0 | |
| #endif | |
| #ifndef __glibcpp_double_is_iec559 | |
| #define __glibcpp_double_is_iec559 false | |
| #endif | |
| #ifndef __glibcpp_double_is_bounded | |
| #define __glibcpp_double_is_bounded true | |
| #endif | |
| #ifndef __glibcpp_double_is_modulo | |
| #define __glibcpp_double_is_modulo false | |
| #endif | |
| #ifndef __glibcpp_double_traps | |
| #define __glibcpp_double_traps false | |
| #endif | |
| #ifndef __glibcpp_double_tinyness_before | |
| #define __glibcpp_double_tinyness_before false | |
| #endif | |
| #ifndef __glibcpp_double_round_style | |
| #define __glibcpp_double_round_style round_toward_zero | |
| #endif | |
| // long double | |
| #if __glibcpp_long_double_bits == 32 | |
| #define __glibcpp_long_double_min __glibcpp_f32_min | |
| #define __glibcpp_long_double_max __glibcpp_f32_max | |
| #define __glibcpp_long_double_digits __glibcpp_f32_digits | |
| #define __glibcpp_long_double_digits10 __glibcpp_f32_digits10 | |
| #define __glibcpp_long_double_radix __glibcpp_f32_radix | |
| #define __glibcpp_long_double_epsilon __glibcpp_f32_epsilon | |
| #define __glibcpp_long_double_round_error __glibcpp_f32_round_error | |
| #define __glibcpp_long_double_min_exponent __glibcpp_f32_min_exponent | |
| #define __glibcpp_long_double_min_exponent10 __glibcpp_f32_min_exponent10 | |
| #define __glibcpp_long_double_max_exponent __glibcpp_f32_max_exponent | |
| #define __glibcpp_long_double_max_exponent10 __glibcpp_f32_max_exponent10 | |
| #elif __glibcpp_long_double_bits == 64 | |
| #define __glibcpp_long_double_min __glibcpp_f64_min | |
| #define __glibcpp_long_double_max __glibcpp_f64_max | |
| #define __glibcpp_long_double_digits __glibcpp_f64_digits | |
| #define __glibcpp_long_double_digits10 __glibcpp_f64_digits10 | |
| #define __glibcpp_long_double_radix __glibcpp_f64_radix | |
| #define __glibcpp_long_double_epsilon __glibcpp_f64_epsilon | |
| #define __glibcpp_long_double_round_error __glibcpp_f64_round_error | |
| #define __glibcpp_long_double_min_exponent __glibcpp_f64_min_exponent | |
| #define __glibcpp_long_double_min_exponent10 __glibcpp_f64_min_exponent10 | |
| #define __glibcpp_long_double_max_exponent __glibcpp_f64_max_exponent | |
| #define __glibcpp_long_double_max_exponent10 __glibcpp_f64_max_exponent10 | |
| #elif __glibcpp_long_double_bits == 80 | |
| #define __glibcpp_long_double_min __glibcpp_f80_min | |
| #define __glibcpp_long_double_max __glibcpp_f80_max | |
| #define __glibcpp_long_double_digits __glibcpp_f80_digits | |
| #define __glibcpp_long_double_digits10 __glibcpp_f80_digits10 | |
| #define __glibcpp_long_double_radix __glibcpp_f80_radix | |
| #define __glibcpp_long_double_epsilon __glibcpp_f80_epsilon | |
| #define __glibcpp_long_double_round_error __glibcpp_f80_round_error | |
| #define __glibcpp_long_double_min_exponent __glibcpp_f80_min_exponent | |
| #define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10 | |
| #define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent | |
| #define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10 | |
| #elif __glibcpp_long_double_bits == 96 | |
| #define __glibcpp_long_double_min __glibcpp_f96_min | |
| #define __glibcpp_long_double_max __glibcpp_f96_max | |
| #define __glibcpp_long_double_digits __glibcpp_f96_digits | |
| #define __glibcpp_long_double_digits10 __glibcpp_f96_digits10 | |
| #define __glibcpp_long_double_radix __glibcpp_f96_radix | |
| #define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon | |
| #define __glibcpp_long_double_round_error __glibcpp_f96_round_error | |
| #define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent | |
| #define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10 | |
| #define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent | |
| #define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10 | |
| #elif __glibcpp_long_double_bits == 128 | |
| #define __glibcpp_long_double_min __glibcpp_f128_min | |
| #define __glibcpp_long_double_max __glibcpp_f128_max | |
| #define __glibcpp_long_double_digits __glibcpp_f128_digits | |
| #define __glibcpp_long_double_digits10 __glibcpp_f128_digits10 | |
| #define __glibcpp_long_double_radix __glibcpp_f128_radix | |
| #define __glibcpp_long_double_epsilon __glibcpp_f128_epsilon | |
| #define __glibcpp_long_double_round_error __glibcpp_f128_round_error | |
| #define __glibcpp_long_double_min_exponent __glibcpp_f128_min_exponent | |
| #define __glibcpp_long_double_min_exponent10 __glibcpp_f128_min_exponent10 | |
| #define __glibcpp_long_double_max_exponent __glibcpp_f128_max_exponent | |
| #define __glibcpp_long_double_max_exponent10 __glibcpp_f128_max_exponent10 | |
| #else | |
| // You must define these macros in the configuration file. | |
| #endif | |
| // FIXME: These are just stubs and inkorrect | |
| #ifndef __glibcpp_long_double_has_infinity | |
| #define __glibcpp_long_double_has_infinity false | |
| #endif | |
| #ifndef __glibcpp_long_double_has_quiet_NaN | |
| #define __glibcpp_long_double_has_quiet_NaN false | |
| #endif | |
| #ifndef __glibcpp_long_double_has_signaling_NaN | |
| #define __glibcpp_long_double_has_signaling_NaN false | |
| #endif | |
| #ifndef __glibcpp_long_double_has_denorm | |
| #define __glibcpp_long_double_has_denorm denorm_absent | |
| #endif | |
| #ifndef __glibcpp_long_double_has_denorm_loss | |
| #define __glibcpp_long_double_has_denorm_loss false | |
| #endif | |
| #ifndef __glibcpp_long_double_infinity | |
| #define __glibcpp_long_double_infinity 0.0L | |
| #endif | |
| #ifndef __glibcpp_long_double_quiet_NaN | |
| #define __glibcpp_long_double_quiet_NaN 0.0L | |
| #endif | |
| #ifndef __glibcpp_long_double_signaling_NaN | |
| #define __glibcpp_long_double_signaling_NaN 0.0L | |
| #endif | |
| #ifndef __glibcpp_long_double_denorm_min | |
| #define __glibcpp_long_double_denorm_min 0.0L | |
| #endif | |
| #ifndef __glibcpp_long_double_is_iec559 | |
| #define __glibcpp_long_double_is_iec559 false | |
| #endif | |
| #ifndef __glibcpp_long_double_is_bounded | |
| #define __glibcpp_long_double_is_bounded true | |
| #endif | |
| #ifndef __glibcpp_long_double_is_modulo | |
| #define __glibcpp_long_double_is_modulo false | |
| #endif | |
| #ifndef __glibcpp_long_double_traps | |
| #define __glibcpp_long_double_traps false | |
| #endif | |
| #ifndef __glibcpp_long_double_tinyness_before | |
| #define __glibcpp_long_double_tinyness_before false | |
| #endif | |
| #ifndef __glibcpp_long_double_round_style | |
| #define __glibcpp_long_double_round_style round_toward_zero | |
| #endif | |
| namespace std | |
| { | |
| enum float_round_style | |
| { | |
| round_indeterminate = -1, | |
| round_toward_zero = 0, | |
| round_to_nearest = 1, | |
| round_toward_infinity = 2, | |
| round_toward_neg_infinity = 3 | |
| }; | |
| enum float_denorm_style | |
| { | |
| denorm_indeterminate = -1, | |
| denorm_absent = 0, | |
| denorm_present = 1 | |
| }; | |
| // | |
| // The primary class traits | |
| // | |
| template<typename _Tp> | |
| struct numeric_limits | |
| { | |
| static const bool is_specialized = false; | |
| static _Tp min() throw() { return static_cast<_Tp>(0); } | |
| static _Tp max() throw() { return static_cast<_Tp>(0); } | |
| static const int digits = 0; | |
| static const int digits10 = 0; | |
| static const bool is_signed = false; | |
| static const bool is_integer = false; | |
| static const bool is_exact = false; | |
| static const int radix = 0; | |
| static _Tp epsilon() throw() { return static_cast<_Tp>(0); } | |
| static _Tp round_error() throw() { return static_cast<_Tp>(0); } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static _Tp infinity() throw() { return static_cast<_Tp>(0); } | |
| static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); } | |
| static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); } | |
| static _Tp denorm_min() throw() { return static_cast<_Tp>(0); } | |
| static const bool is_iec559 = false; | |
| static const bool is_bounded = false; | |
| static const bool is_modulo = false; | |
| static const bool traps = false; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_specialized; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::digits; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::digits10; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_signed; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_integer; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_exact; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::radix; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::min_exponent; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::min_exponent10; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::max_exponent; | |
| template<typename _Tp> | |
| const int | |
| numeric_limits<_Tp>::max_exponent10; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::has_infinity; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::has_quiet_NaN; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::has_signaling_NaN; | |
| template<typename _Tp> | |
| const float_denorm_style | |
| numeric_limits<_Tp>::has_denorm; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::has_denorm_loss; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_iec559; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_bounded; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::is_modulo; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::traps; | |
| template<typename _Tp> | |
| const bool | |
| numeric_limits<_Tp>::tinyness_before; | |
| template<typename _Tp> | |
| const float_round_style | |
| numeric_limits<_Tp>::round_style; | |
| // Now there follow 15 explicit specializations. Yes, 15. Make sure | |
| // you get the count right. | |
| template<> | |
| struct numeric_limits<bool> | |
| { | |
| static const bool is_specialized = true; | |
| static bool min() throw() | |
| { return false; } | |
| static bool max() throw() | |
| { return true; } | |
| static const int digits = __glibcpp_bool_digits; | |
| static const int digits10 = 0; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static bool epsilon() throw() | |
| { return false; } | |
| static bool round_error() throw() | |
| { return false; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static bool infinity() throw() | |
| { return false; } | |
| static bool quiet_NaN() throw() | |
| { return false; } | |
| static bool signaling_NaN() throw() | |
| { return false; } | |
| static bool denorm_min() throw() | |
| { return false; } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| // It is not clear what it means for a boolean type to trap. | |
| // This is a DR on the LWG issue list. Here, I use integer | |
| // promotion semantics. | |
| static const bool traps = __glibcpp_signed_int_traps | |
| || __glibcpp_signed_long_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_bool_digits | |
| template<> | |
| struct numeric_limits<char> | |
| { | |
| static const bool is_specialized = true; | |
| static char min() throw() | |
| { return __glibcpp_char_min; } | |
| static char max() throw() | |
| { return __glibcpp_char_max; } | |
| static const int digits = __glibcpp_char_digits; | |
| static const int digits10 = __glibcpp_char_digits10; | |
| static const bool is_signed = __glibcpp_plain_char_is_signed; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static char epsilon() throw() | |
| { return char(); } | |
| static char round_error() throw() | |
| { return char(); } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static char infinity() throw() | |
| { return char(); } | |
| static char quiet_NaN() throw() | |
| { return char(); } | |
| static char signaling_NaN() throw() | |
| { return char(); } | |
| static char denorm_min() throw() | |
| { return static_cast<char>(0); } | |
| static const bool is_iec559 = false; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_char_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_char_min | |
| #undef __glibcpp_char_max | |
| #undef __glibcpp_char_digits | |
| #undef __glibcpp_char_digits10 | |
| #undef __glibcpp_char_is_signed | |
| #undef __glibcpp_char_traps | |
| template<> | |
| struct numeric_limits<signed char> | |
| { | |
| static const bool is_specialized = true; | |
| static signed char min() throw() | |
| { return __glibcpp_signed_char_min; } | |
| static signed char max() throw() | |
| { return __glibcpp_signed_char_max; } | |
| static const int digits = __glibcpp_signed_char_digits; | |
| static const int digits10 = __glibcpp_signed_char_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static signed char epsilon() throw() | |
| { return 0; } | |
| static signed char round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static signed char infinity() throw() | |
| { return static_cast<signed char>(0); } | |
| static signed char quiet_NaN() throw() | |
| { return static_cast<signed char>(0); } | |
| static signed char signaling_NaN() throw() | |
| { return static_cast<signed char>(0); } | |
| static signed char denorm_min() throw() | |
| { return static_cast<signed char>(0); } | |
| static const bool is_iec559 = false; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_char_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_signed_char_min | |
| #undef __glibcpp_signed_char_max | |
| #undef __glibcpp_signed_char_digits | |
| #undef __glibcpp_signed_char_digits10 | |
| #undef __glibcpp_signed_char_traps | |
| template<> | |
| struct numeric_limits<unsigned char> | |
| { | |
| static const bool is_specialized = true; | |
| static unsigned char min() throw() | |
| { return 0; } | |
| static unsigned char max() throw() | |
| { return __glibcpp_unsigned_char_max; } | |
| static const int digits = __glibcpp_unsigned_char_digits; | |
| static const int digits10 = __glibcpp_unsigned_char_digits10; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static unsigned char epsilon() throw() | |
| { return 0; } | |
| static unsigned char round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static unsigned char infinity() throw() | |
| { return static_cast<unsigned char>(0); } | |
| static unsigned char quiet_NaN() throw() | |
| { return static_cast<unsigned char>(0); } | |
| static unsigned char signaling_NaN() throw() | |
| { return static_cast<unsigned char>(0); } | |
| static unsigned char denorm_min() throw() | |
| { return static_cast<unsigned char>(0); } | |
| static const bool is_iec559 = false; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| static const bool traps = __glibcpp_unsigned_char_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_unsigned_char_max | |
| #undef __glibcpp_unsigned_char_digits | |
| #undef __glibcpp_unsigned_char_digits10 | |
| #undef __glibcpp_unsigned_char_traps | |
| template<> | |
| struct numeric_limits<wchar_t> | |
| { | |
| static const bool is_specialized = true; | |
| static wchar_t min() throw() | |
| { return __glibcpp_wchar_t_min; } | |
| static wchar_t max() throw() | |
| { return __glibcpp_wchar_t_max; } | |
| static const int digits = __glibcpp_wchar_t_digits; | |
| static const int digits10 = __glibcpp_wchar_t_digits10; | |
| static const bool is_signed = __glibcpp_wchar_t_is_signed; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static wchar_t epsilon() throw() | |
| { return 0; } | |
| static wchar_t round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static wchar_t infinity() throw() | |
| { return wchar_t(); } | |
| static wchar_t quiet_NaN() throw() | |
| { return wchar_t(); } | |
| static wchar_t signaling_NaN() throw() | |
| { return wchar_t(); } | |
| static wchar_t denorm_min() throw() | |
| { return wchar_t(); } | |
| static const bool is_iec559 = false; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_wchar_t_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_wchar_t_min | |
| #undef __glibcpp_wchar_t_max | |
| #undef __glibcpp_wchar_t_digits | |
| #undef __glibcpp_wchar_t_digits10 | |
| #undef __glibcpp_wchar_t_is_signed | |
| #undef __glibcpp_wchar_t_traps | |
| template<> | |
| struct numeric_limits<short> | |
| { | |
| static const bool is_specialized = true; | |
| static short min() throw() | |
| { return __glibcpp_signed_short_min; } | |
| static short max() throw() | |
| { return __glibcpp_signed_short_max; } | |
| static const int digits = __glibcpp_signed_short_digits; | |
| static const int digits10 = __glibcpp_signed_short_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static short epsilon() throw() | |
| { return 0; } | |
| static short round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static short infinity() throw() | |
| { return short(); } | |
| static short quiet_NaN() throw() | |
| { return short(); } | |
| static short signaling_NaN() throw() | |
| { return short(); } | |
| static short denorm_min() throw() | |
| { return short(); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_short_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_signed_short_min | |
| #undef __glibcpp_signed_short_max | |
| #undef __glibcpp_signed_short_digits | |
| #undef __glibcpp_signed_short_digits10 | |
| #undef __glibcpp_signed_short_traps | |
| template<> | |
| struct numeric_limits<unsigned short> | |
| { | |
| static const bool is_specialized = true; | |
| static unsigned short min() throw() | |
| { return 0; } | |
| static unsigned short max() throw() | |
| { return __glibcpp_unsigned_short_max; } | |
| static const int digits = __glibcpp_unsigned_short_digits; | |
| static const int digits10 = __glibcpp_unsigned_short_digits10; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static unsigned short epsilon() throw() | |
| { return 0; } | |
| static unsigned short round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static unsigned short infinity() throw() | |
| { return static_cast<unsigned short>(0); } | |
| static unsigned short quiet_NaN() throw() | |
| { return static_cast<unsigned short>(0); } | |
| static unsigned short signaling_NaN() throw() | |
| { return static_cast<unsigned short>(0); } | |
| static unsigned short denorm_min() throw() | |
| { return static_cast<unsigned short>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| static const bool traps = __glibcpp_unsigned_short_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_unsigned_short_max | |
| #undef __glibcpp_unsigned_short_digits | |
| #undef __glibcpp_unsigned_short_digits10 | |
| #undef __glibcpp_unsigned_short_traps | |
| template<> | |
| struct numeric_limits<int> | |
| { | |
| static const bool is_specialized = true; | |
| static int min() throw() | |
| { return __glibcpp_signed_int_min; } | |
| static int max() throw() | |
| { return __glibcpp_signed_int_max; } | |
| static const int digits = __glibcpp_signed_int_digits; | |
| static const int digits10 = __glibcpp_signed_int_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static int epsilon() throw() | |
| { return 0; } | |
| static int round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static int infinity() throw() | |
| { return static_cast<int>(0); } | |
| static int quiet_NaN() throw() | |
| { return static_cast<int>(0); } | |
| static int signaling_NaN() throw() | |
| { return static_cast<int>(0); } | |
| static int denorm_min() throw() | |
| { return static_cast<int>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_int_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_signed_int_min | |
| #undef __glibcpp_signed_int_max | |
| #undef __glibcpp_signed_int_digits | |
| #undef __glibcpp_signed_int_digits10 | |
| #undef __glibcpp_signed_int_traps | |
| template<> | |
| struct numeric_limits<unsigned int> | |
| { | |
| static const bool is_specialized = true; | |
| static unsigned int min() throw() | |
| { return 0; } | |
| static unsigned int max() throw() | |
| { return __glibcpp_unsigned_int_max; } | |
| static const int digits = __glibcpp_unsigned_int_digits; | |
| static const int digits10 = __glibcpp_unsigned_int_digits10; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static unsigned int epsilon() throw() | |
| { return 0; } | |
| static unsigned int round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static unsigned int infinity() throw() | |
| { return static_cast<unsigned int>(0); } | |
| static unsigned int quiet_NaN() throw() | |
| { return static_cast<unsigned int>(0); } | |
| static unsigned int signaling_NaN() throw() | |
| { return static_cast<unsigned int>(0); } | |
| static unsigned int denorm_min() throw() | |
| { return static_cast<unsigned int>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| static const bool traps = __glibcpp_unsigned_int_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_unsigned_int_max | |
| #undef __glibcpp_unsigned_int_digits | |
| #undef __glibcpp_unsigned_int_digits10 | |
| #undef __glibcpp_unsigned_int_traps | |
| template<> | |
| struct numeric_limits<long> | |
| { | |
| static const bool is_specialized = true; | |
| static long min() throw() | |
| { return __glibcpp_signed_long_min; } | |
| static long max() throw() | |
| { return __glibcpp_signed_long_max; } | |
| static const int digits = __glibcpp_signed_long_digits; | |
| static const int digits10 = __glibcpp_signed_long_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static long epsilon() throw() | |
| { return 0; } | |
| static long round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static long infinity() throw() | |
| { return static_cast<long>(0); } | |
| static long quiet_NaN() throw() | |
| { return static_cast<long>(0); } | |
| static long signaling_NaN() throw() | |
| { return static_cast<long>(0); } | |
| static long denorm_min() throw() | |
| { return static_cast<long>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_long_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_signed_long_min | |
| #undef __glibcpp_signed_long_max | |
| #undef __glibcpp_signed_long_digits | |
| #undef __glibcpp_signed_long_digits10 | |
| #undef __glibcpp_signed_long_traps | |
| template<> | |
| struct numeric_limits<unsigned long> | |
| { | |
| static const bool is_specialized = true; | |
| static unsigned long min() throw() | |
| { return 0; } | |
| static unsigned long max() throw() | |
| { return __glibcpp_unsigned_long_max; } | |
| static const int digits = __glibcpp_unsigned_long_digits; | |
| static const int digits10 = __glibcpp_unsigned_long_digits10; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static unsigned long epsilon() throw() | |
| { return 0; } | |
| static unsigned long round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static unsigned long infinity() throw() | |
| { return static_cast<unsigned long>(0); } | |
| static unsigned long quiet_NaN() throw() | |
| { return static_cast<unsigned long>(0); } | |
| static unsigned long signaling_NaN() throw() | |
| { return static_cast<unsigned long>(0); } | |
| static unsigned long denorm_min() throw() | |
| { return static_cast<unsigned long>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| static const bool traps = __glibcpp_unsigned_long_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_unsigned_long_max | |
| #undef __glibcpp_unsigned_long_digits | |
| #undef __glibcpp_unsigned_long_digits10 | |
| #undef __glibcpp_unsigned_long_traps | |
| template<> | |
| struct numeric_limits<long long> | |
| { | |
| static const bool is_specialized = true; | |
| static long long min() throw() | |
| { return __glibcpp_signed_long_long_min; } | |
| static long long max() throw() | |
| { return __glibcpp_signed_long_long_max; } | |
| static const int digits = __glibcpp_signed_long_long_digits; | |
| static const int digits10 = __glibcpp_signed_long_long_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static long long epsilon() throw() | |
| { return 0; } | |
| static long long round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static long long infinity() throw() | |
| { return static_cast<long long>(0); } | |
| static long long quiet_NaN() throw() | |
| { return static_cast<long long>(0); } | |
| static long long signaling_NaN() throw() | |
| { return static_cast<long long>(0); } | |
| static long long denorm_min() throw() | |
| { return static_cast<long long>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = false; | |
| static const bool traps = __glibcpp_signed_long_long_traps; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_signed_long_long_min | |
| #undef __glibcpp_signed_long_long_max | |
| #undef __glibcpp_signed_long_long_digits | |
| #undef __glibcpp_signed_long_long_digits10 | |
| #undef __glibcpp_signed_long_long_traps | |
| template<> | |
| struct numeric_limits<unsigned long long> | |
| { | |
| static const bool is_specialized = true; | |
| static unsigned long long min() throw() | |
| { return 0; } | |
| static unsigned long long max() throw() | |
| { return __glibcpp_unsigned_long_long_max; } | |
| static const int digits = __glibcpp_unsigned_long_long_digits; | |
| static const int digits10 = __glibcpp_unsigned_long_long_digits10; | |
| static const bool is_signed = false; | |
| static const bool is_integer = true; | |
| static const bool is_exact = true; | |
| static const int radix = 2; | |
| static unsigned long long epsilon() throw() | |
| { return 0; } | |
| static unsigned long long round_error() throw() | |
| { return 0; } | |
| static const int min_exponent = 0; | |
| static const int min_exponent10 = 0; | |
| static const int max_exponent = 0; | |
| static const int max_exponent10 = 0; | |
| static const bool has_infinity = false; | |
| static const bool has_quiet_NaN = false; | |
| static const bool has_signaling_NaN = false; | |
| static const float_denorm_style has_denorm = denorm_absent; | |
| static const bool has_denorm_loss = false; | |
| static unsigned long long infinity() throw() | |
| { return static_cast<unsigned long long>(0); } | |
| static unsigned long long quiet_NaN() throw() | |
| { return static_cast<unsigned long long>(0); } | |
| static unsigned long long signaling_NaN() throw() | |
| { return static_cast<unsigned long long>(0); } | |
| static unsigned long long denorm_min() throw() | |
| { return static_cast<unsigned long long>(0); } | |
| static const bool is_iec559 = true; | |
| static const bool is_bounded = true; | |
| static const bool is_modulo = true; | |
| static const bool traps = true; | |
| static const bool tinyness_before = false; | |
| static const float_round_style round_style = round_toward_zero; | |
| }; | |
| #undef __glibcpp_unsigned_long_long_max | |
| #undef __glibcpp_unsigned_long_long_digits | |
| #undef __glibcpp_unsigned_long_long_digits10 | |
| #undef __glibcpp_unsigned_long_long_traps | |
| template<> | |
| struct numeric_limits<float> | |
| { | |
| static const bool is_specialized = true; | |
| static float min() throw() | |
| { return __glibcpp_float_min; } | |
| static float max() throw() | |
| { return __glibcpp_float_max; } | |
| static const int digits = __glibcpp_float_digits; | |
| static const int digits10 = __glibcpp_float_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = false; | |
| static const bool is_exact = false; | |
| static const int radix = __glibcpp_float_radix; | |
| static float epsilon() throw() | |
| { return __glibcpp_float_epsilon; } | |
| static float round_error() throw() | |
| { return __glibcpp_float_round_error; } | |
| static const int min_exponent = __glibcpp_float_min_exponent; | |
| static const int min_exponent10 = __glibcpp_float_min_exponent10; | |
| static const int max_exponent = __glibcpp_float_max_exponent; | |
| static const int max_exponent10 = __glibcpp_float_max_exponent10; | |
| static const bool has_infinity = __glibcpp_float_has_infinity; | |
| static const bool has_quiet_NaN = __glibcpp_float_has_quiet_NaN; | |
| static const bool has_signaling_NaN = __glibcpp_float_has_signaling_NaN; | |
| static const float_denorm_style has_denorm = __glibcpp_float_has_denorm; | |
| static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss; | |
| static float infinity() throw() | |
| { return __glibcpp_float_infinity; } | |
| static float quiet_NaN() throw() | |
| { return __glibcpp_float_quiet_NaN; } | |
| static float signaling_NaN() throw() | |
| { return __glibcpp_float_signaling_NaN; } | |
| static float denorm_min() throw() | |
| { return __glibcpp_float_denorm_min; } | |
| static const bool is_iec559 = __glibcpp_float_is_iec559; | |
| static const bool is_bounded = __glibcpp_float_is_bounded; | |
| static const bool is_modulo = __glibcpp_float_is_modulo; | |
| static const bool traps = __glibcpp_float_traps; | |
| static const bool tinyness_before = __glibcpp_float_tinyness_before; | |
| static const float_round_style round_style = __glibcpp_float_round_style; | |
| }; | |
| #undef __glibcpp_float_min | |
| #undef __glibcpp_float_max | |
| #undef __glibcpp_float_digits | |
| #undef __glibcpp_float_digits10 | |
| #undef __glibcpp_float_radix | |
| #undef __glibcpp_float_round_error | |
| #undef __glibcpp_float_min_exponent | |
| #undef __glibcpp_float_min_exponent10 | |
| #undef __glibcpp_float_max_exponent | |
| #undef __glibcpp_float_max_exponent10 | |
| #undef __glibcpp_float_has_infinity | |
| #undef __glibcpp_float_has_quiet_NaN | |
| #undef __glibcpp_float_has_signaling_NaN | |
| #undef __glibcpp_float_has_denorm | |
| #undef __glibcpp_float_has_denorm_loss | |
| #undef __glibcpp_float_infinity | |
| #undef __glibcpp_float_quiet_NaN | |
| #undef __glibcpp_float_signaling_NaN | |
| #undef __glibcpp_float_denorm_min | |
| #undef __glibcpp_float_is_iec559 | |
| #undef __glibcpp_float_is_bounded | |
| #undef __glibcpp_float_is_modulo | |
| #undef __glibcpp_float_traps | |
| #undef __glibcpp_float_tinyness_before | |
| #undef __glibcpp_float_round_style | |
| template<> | |
| struct numeric_limits<double> | |
| { | |
| static const bool is_specialized = true; | |
| static double min() throw() | |
| { return __glibcpp_double_min; } | |
| static double max() throw() | |
| { return __glibcpp_double_max; } | |
| static const int digits = __glibcpp_double_digits; | |
| static const int digits10 = __glibcpp_double_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = false; | |
| static const bool is_exact = false; | |
| static const int radix = __glibcpp_double_radix; | |
| static double epsilon() throw() | |
| { return __glibcpp_double_epsilon; } | |
| static double round_error() throw() | |
| { return __glibcpp_double_round_error; } | |
| static const int min_exponent = __glibcpp_double_min_exponent; | |
| static const int min_exponent10 = __glibcpp_double_min_exponent10; | |
| static const int max_exponent = __glibcpp_double_max_exponent; | |
| static const int max_exponent10 = __glibcpp_double_max_exponent10; | |
| static const bool has_infinity = __glibcpp_double_has_infinity; | |
| static const bool has_quiet_NaN = __glibcpp_double_has_quiet_NaN; | |
| static const bool has_signaling_NaN = __glibcpp_double_has_signaling_NaN; | |
| static const float_denorm_style has_denorm = | |
| __glibcpp_double_has_denorm; | |
| static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss; | |
| static double infinity() throw() | |
| { return __glibcpp_double_infinity; } | |
| static double quiet_NaN() throw() | |
| { return __glibcpp_double_quiet_NaN; } | |
| static double signaling_NaN() throw() | |
| { return __glibcpp_double_signaling_NaN; } | |
| static double denorm_min() throw() | |
| { return __glibcpp_double_denorm_min; } | |
| static const bool is_iec559 = __glibcpp_double_is_iec559; | |
| static const bool is_bounded = __glibcpp_double_is_bounded; | |
| static const bool is_modulo = __glibcpp_double_is_modulo; | |
| static const bool traps = __glibcpp_double_traps; | |
| static const bool tinyness_before = __glibcpp_double_tinyness_before; | |
| static const float_round_style round_style = | |
| __glibcpp_double_round_style; | |
| }; | |
| #undef __glibcpp_double_min | |
| #undef __glibcpp_double_max | |
| #undef __glibcpp_double_digits | |
| #undef __glibcpp_double_digits10 | |
| #undef __glibcpp_double_radix | |
| #undef __glibcpp_double_round_error | |
| #undef __glibcpp_double_min_exponent | |
| #undef __glibcpp_double_min_exponent10 | |
| #undef __glibcpp_double_max_exponent | |
| #undef __glibcpp_double_max_exponent10 | |
| #undef __glibcpp_double_has_infinity | |
| #undef __glibcpp_double_has_quiet_NaN | |
| #undef __glibcpp_double_has_signaling_NaN | |
| #undef __glibcpp_double_has_denorm | |
| #undef __glibcpp_double_has_denorm_loss | |
| #undef __glibcpp_double_infinity | |
| #undef __glibcpp_double_quiet_NaN | |
| #undef __glibcpp_double_signaling_NaN | |
| #undef __glibcpp_double_denorm_min | |
| #undef __glibcpp_double_is_iec559 | |
| #undef __glibcpp_double_is_bounded | |
| #undef __glibcpp_double_is_modulo | |
| #undef __glibcpp_double_traps | |
| #undef __glibcpp_double_tinyness_before | |
| #undef __glibcpp_double_round_style | |
| template<> | |
| struct numeric_limits<long double> | |
| { | |
| static const bool is_specialized = true; | |
| static long double min() throw() | |
| { return __glibcpp_long_double_min; } | |
| static long double max() throw() | |
| { return __glibcpp_long_double_max; } | |
| static const int digits = __glibcpp_long_double_digits; | |
| static const int digits10 = __glibcpp_long_double_digits10; | |
| static const bool is_signed = true; | |
| static const bool is_integer = false; | |
| static const bool is_exact = false; | |
| static const int radix = __glibcpp_long_double_radix; | |
| static long double epsilon() throw() | |
| { return __glibcpp_long_double_epsilon; } | |
| static long double round_error() throw() | |
| { return __glibcpp_long_double_round_error; } | |
| static const int min_exponent = __glibcpp_long_double_min_exponent; | |
| static const int min_exponent10 = __glibcpp_long_double_min_exponent10; | |
| static const int max_exponent = __glibcpp_long_double_max_exponent; | |
| static const int max_exponent10 = __glibcpp_long_double_max_exponent10; | |
| static const bool has_infinity = __glibcpp_long_double_has_infinity; | |
| static const bool has_quiet_NaN = __glibcpp_long_double_has_quiet_NaN; | |
| static const bool has_signaling_NaN = | |
| __glibcpp_long_double_has_signaling_NaN; | |
| static const float_denorm_style has_denorm = | |
| __glibcpp_long_double_has_denorm; | |
| static const bool has_denorm_loss = | |
| __glibcpp_long_double_has_denorm_loss; | |
| static long double infinity() throw() | |
| { return __glibcpp_long_double_infinity; } | |
| static long double quiet_NaN() throw() | |
| { return __glibcpp_long_double_quiet_NaN; } | |
| static long double signaling_NaN() throw() | |
| { return __glibcpp_long_double_signaling_NaN; } | |
| static long double denorm_min() throw() | |
| { return __glibcpp_long_double_denorm_min; } | |
| static const bool is_iec559 = __glibcpp_long_double_is_iec559; | |
| static const bool is_bounded = __glibcpp_long_double_is_bounded; | |
| static const bool is_modulo = __glibcpp_long_double_is_modulo; | |
| static const bool traps = __glibcpp_long_double_traps; | |
| static const bool tinyness_before = __glibcpp_long_double_tinyness_before; | |
| static const float_round_style round_style = | |
| __glibcpp_long_double_round_style; | |
| }; | |
| #undef __glibcpp_long_double_min | |
| #undef __glibcpp_long_double_max | |
| #undef __glibcpp_long_double_digits | |
| #undef __glibcpp_long_double_digits10 | |
| #undef __glibcpp_long_double_radix | |
| #undef __glibcpp_long_double_round_error | |
| #undef __glibcpp_long_double_min_exponent | |
| #undef __glibcpp_long_double_min_exponent10 | |
| #undef __glibcpp_long_double_max_exponent | |
| #undef __glibcpp_long_double_max_exponent10 | |
| #undef __glibcpp_long_double_has_infinity | |
| #undef __glibcpp_long_double_has_quiet_NaN | |
| #undef __glibcpp_long_double_has_signaling_NaN | |
| #undef __glibcpp_long_double_has_denorm | |
| #undef __glibcpp_long_double_has_denorm_loss | |
| #undef __glibcpp_long_double_infinity | |
| #undef __glibcpp_long_double_quiet_NaN | |
| #undef __glibcpp_long_double_signaling_NaN | |
| #undef __glibcpp_long_double_denorm_min | |
| #undef __glibcpp_long_double_is_iec559 | |
| #undef __glibcpp_long_double_is_bounded | |
| #undef __glibcpp_long_double_is_modulo | |
| #undef __glibcpp_long_double_traps | |
| #undef __glibcpp_long_double_tinyness_before | |
| #undef __glibcpp_long_double_round_style | |
| } // namespace std | |
| #endif // _CPP_NUMERIC_LIMITS |