std_limits.h revision 97403
1// The template and inlines for the -*- C++ -*- numeric_limits classes. 2 3// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 19// USA. 20 21// As a special exception, you may use this file as part of a free software 22// library without restriction. Specifically, if other files instantiate 23// templates or use macros or inline functions from this file, or you compile 24// this file and link it with other files to produce an executable, this 25// file does not by itself cause the resulting executable to be covered by 26// the GNU General Public License. This exception does not however 27// invalidate any other reasons why the executable file might be covered by 28// the GNU General Public License. 29 30// Note: this is not a conforming implementation. 31// Written by Gabriel Dos Reis <gdr@codesourcery.com> 32 33// 34// ISO 14882:1998 35// 18.2.1 36// 37 38/** @file limits 39 * This is a Standard C++ Library header. You should @c #include this header 40 * in your programs, rather than any of the "st[dl]_*.h" implementation files. 41 */ 42 43#ifndef _CPP_NUMERIC_LIMITS 44#define _CPP_NUMERIC_LIMITS 1 45 46#pragma GCC system_header 47 48#include <bits/cpu_limits.h> 49#include <bits/c++config.h> 50 51// 52// The numeric_limits<> traits document implementation-defined aspects 53// of fundamental arithmetic data types (integers and floating points). 54// From Standard C++ point of view, there are 13 such types: 55// * integers 56// bool (1) 57// char, signed char, unsigned char (3) 58// short, unsigned short (2) 59// int, unsigned (2) 60// long, unsigned long (2) 61// 62// * floating points 63// float (1) 64// double (1) 65// long double (1) 66// 67// GNU C++ undertstands (where supported by the host C-library) 68// * integer 69// long long, unsigned long long (2) 70// 71// which brings us to 15 fundamental arithmetic data types in GNU C++. 72// 73// 74// Since a numeric_limits<> is a bit tricky to get right, we rely on 75// an interface composed of macros which should be defined in config/os 76// or config/cpu when they differ from the generic (read arbitrary) 77// definitions given here. 78// 79 80// These values can be overridden in the target configuration file. 81// The default values are appropriate for many 32-bit targets. 82 83#ifndef __glibcpp_char_bits 84#define __glibcpp_char_bits 8 85#endif 86#ifdef __CHAR_UNSIGNED__ 87#define __glibcpp_plain_char_is_signed false 88#else 89#define __glibcpp_plain_char_is_signed true 90#endif 91#ifndef __glibcpp_short_bits 92#define __glibcpp_short_bits 16 93#endif 94#ifndef __glibcpp_int_bits 95#define __glibcpp_int_bits 32 96#endif 97#ifndef __glibcpp_long_bits 98#define __glibcpp_long_bits 32 99#endif 100#ifndef __glibcpp_wchar_t_bits 101#define __glibcpp_wchar_t_bits 32 102#endif 103#ifndef __glibcpp_wchar_t_is_signed 104#define __glibcpp_wchar_t_is_signed true 105#endif 106#ifndef __glibcpp_long_long_bits 107#define __glibcpp_long_long_bits 64 108#endif 109#ifndef __glibcpp_float_bits 110#define __glibcpp_float_bits 32 111#endif 112#ifndef __glibcpp_double_bits 113#define __glibcpp_double_bits 64 114#endif 115#ifndef __glibcpp_long_double_bits 116#define __glibcpp_long_double_bits 128 117#endif 118 119#ifndef __glibcpp_char_traps 120#define __glibcpp_char_traps true 121#endif 122#ifndef __glibcpp_short_traps 123#define __glibcpp_short_traps true 124#endif 125#ifndef __glibcpp_int_traps 126#define __glibcpp_int_traps true 127#endif 128#ifndef __glibcpp_long_traps 129#define __glibcpp_long_traps true 130#endif 131#ifndef __glibcpp_wchar_t_traps 132#define __glibcpp_wchar_t_traps true 133#endif 134#ifndef __glibcpp_long_long_traps 135#define __glibcpp_long_long_traps true 136#endif 137 138// You should not need to define any macros below this point, unless 139// you have a machine with non-standard bit-widths. 140 141// These values are the minimums and maximums for standard data types 142// of common widths. 143 144#define __glibcpp_s8_max 127 145#define __glibcpp_s8_min (-__glibcpp_s8_max - 1) 146#define __glibcpp_s8_digits 7 147#define __glibcpp_s8_digits10 2 148#define __glibcpp_u8_min 0U 149#define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1) 150#define __glibcpp_u8_digits 8 151#define __glibcpp_u8_digits10 2 152#define __glibcpp_s16_max 32767 153#define __glibcpp_s16_min (-__glibcpp_s16_max - 1) 154#define __glibcpp_s16_digits 15 155#define __glibcpp_s16_digits10 4 156#define __glibcpp_u16_min 0U 157#define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1) 158#define __glibcpp_u16_digits 16 159#define __glibcpp_u16_digits10 4 160#define __glibcpp_s32_max 2147483647L 161#define __glibcpp_s32_min (-__glibcpp_s32_max - 1) 162#define __glibcpp_s32_digits 31 163#define __glibcpp_s32_digits10 9 164#define __glibcpp_u32_min 0UL 165#define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1) 166#define __glibcpp_u32_digits 32 167#define __glibcpp_u32_digits10 9 168#define __glibcpp_s64_max 9223372036854775807LL 169#define __glibcpp_s64_min (-__glibcpp_s64_max - 1) 170#define __glibcpp_s64_digits 63 171#define __glibcpp_s64_digits10 18 172#define __glibcpp_u64_min 0ULL 173#define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1) 174#define __glibcpp_u64_digits 64 175#define __glibcpp_u64_digits10 19 176 177#define __glibcpp_f32_min 1.17549435e-38F 178#define __glibcpp_f32_max 3.40282347e+38F 179#define __glibcpp_f32_digits 24 180#define __glibcpp_f32_digits10 6 181#define __glibcpp_f32_radix 2 182#define __glibcpp_f32_epsilon 1.19209290e-07F 183#define __glibcpp_f32_round_error 1.0F 184#define __glibcpp_f32_min_exponent -125 185#define __glibcpp_f32_min_exponent10 -37 186#define __glibcpp_f32_max_exponent 128 187#define __glibcpp_f32_max_exponent10 38 188#define __glibcpp_f64_min 2.2250738585072014e-308 189#define __glibcpp_f64_max 1.7976931348623157e+308 190#define __glibcpp_f64_digits 53 191#define __glibcpp_f64_digits10 15 192#define __glibcpp_f64_radix 2 193#define __glibcpp_f64_epsilon 2.2204460492503131e-16 194#define __glibcpp_f64_round_error 1.0 195#define __glibcpp_f64_min_exponent -1021 196#define __glibcpp_f64_min_exponent10 -307 197#define __glibcpp_f64_max_exponent 1024 198#define __glibcpp_f64_max_exponent10 308 199#define __glibcpp_f80_min 3.36210314311209350626e-4932L 200#define __glibcpp_f80_max 1.18973149535723176502e+4932L 201#define __glibcpp_f80_digits 64 202#define __glibcpp_f80_digits10 18 203#define __glibcpp_f80_radix 2 204#define __glibcpp_f80_epsilon 1.08420217248550443401e-19L 205#define __glibcpp_f80_round_error 1.0L 206#define __glibcpp_f80_min_exponent -16381 207#define __glibcpp_f80_min_exponent10 -4931 208#define __glibcpp_f80_max_exponent 16384 209#define __glibcpp_f80_max_exponent10 4932 210#define __glibcpp_f96_min 1.68105157155604675313e-4932L 211#define __glibcpp_f96_max 1.18973149535723176502e+4932L 212#define __glibcpp_f96_digits 64 213#define __glibcpp_f96_digits10 18 214#define __glibcpp_f96_radix 2 215#define __glibcpp_f96_epsilon 1.08420217248550443401e-19L 216#define __glibcpp_f96_round_error 1.0L 217#define __glibcpp_f96_min_exponent -16382 218#define __glibcpp_f96_min_exponent10 -4931 219#define __glibcpp_f96_max_exponent 16384 220#define __glibcpp_f96_max_exponent10 4932 221#define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L 222#define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L 223#define __glibcpp_f128_digits 113 224#define __glibcpp_f128_digits10 33 225#define __glibcpp_f128_radix 2 226#define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L 227#define __glibcpp_f128_round_error 1.0L 228#define __glibcpp_f128_min_exponent -16381 229#define __glibcpp_f128_min_exponent10 -4931 230#define __glibcpp_f128_max_exponent 16384 231#define __glibcpp_f128_max_exponent10 4932 232 233// bool-specific hooks: 234// __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps 235 236#ifndef __glibcpp_bool_digits 237#define __glibcpp_bool_digits 1 238#endif 239 240// char. 241 242#define __glibcpp_plain_char_traps true 243#define __glibcpp_signed_char_traps true 244#define __glibcpp_unsigned_char_traps true 245#ifndef __glibcpp_char_is_modulo 246#define __glibcpp_char_is_modulo true 247#endif 248#ifndef __glibcpp_signed_char_is_modulo 249#define __glibcpp_signed_char_is_modulo true 250#endif 251#if __glibcpp_char_bits == 8 252#define __glibcpp_signed_char_min __glibcpp_s8_min 253#define __glibcpp_signed_char_max __glibcpp_s8_max 254#define __glibcpp_signed_char_digits __glibcpp_s8_digits 255#define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10 256#define __glibcpp_unsigned_char_min __glibcpp_u8_min 257#define __glibcpp_unsigned_char_max __glibcpp_u8_max 258#define __glibcpp_unsigned_char_digits __glibcpp_u8_digits 259#define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10 260#elif __glibcpp_char_bits == 16 261#define __glibcpp_signed_char_min __glibcpp_s16_min 262#define __glibcpp_signed_char_max __glibcpp_s16_max 263#define __glibcpp_signed_char_digits __glibcpp_s16_digits 264#define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10 265#define __glibcpp_unsigned_char_min __glibcpp_u16_min 266#define __glibcpp_unsigned_char_max __glibcpp_u16_max 267#define __glibcpp_unsigned_char_digits __glibcpp_u16_digits 268#define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10 269#elif __glibcpp_char_bits == 32 270#define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min 271#define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max 272#define __glibcpp_signed_char_digits __glibcpp_s32_digits 273#define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10 274#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min 275#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max 276#define __glibcpp_unsigned_char_digits __glibcpp_u32_digits 277#define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10 278#elif __glibcpp_char_bits == 64 279#define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min 280#define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max 281#define __glibcpp_signed_char_digits __glibcpp_s64_digits 282#define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10 283#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min 284#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max 285#define __glibcpp_unsigned_char_digits __glibcpp_u64_digits 286#define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10 287#else 288// You must define these macros in the configuration file. 289#endif 290 291#if __glibcpp_plain_char_is_signed 292#define __glibcpp_char_min (char)__glibcpp_signed_char_min 293#define __glibcpp_char_max (char)__glibcpp_signed_char_max 294#define __glibcpp_char_digits __glibcpp_signed_char_digits 295#define __glibcpp_char_digits10 __glibcpp_signed_char_digits 296#else 297#define __glibcpp_char_min (char)__glibcpp_unsigned_char_min 298#define __glibcpp_char_max (char)__glibcpp_unsigned_char_max 299#define __glibcpp_char_digits __glibcpp_unsigned_char_digits 300#define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits 301#endif 302 303// short 304 305#define __glibcpp_signed_short_traps true 306#define __glibcpp_unsigned_short_traps true 307#ifndef __glibcpp_signed_short_is_modulo 308#define __glibcpp_signed_short_is_modulo true 309#endif 310#if __glibcpp_short_bits == 8 311#define __glibcpp_signed_short_min __glibcpp_s8_min 312#define __glibcpp_signed_short_max __glibcpp_s8_max 313#define __glibcpp_signed_short_digits __glibcpp_s8_digits 314#define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10 315#define __glibcpp_unsigned_short_min __glibcpp_u8_min 316#define __glibcpp_unsigned_short_max __glibcpp_u8_max 317#define __glibcpp_unsigned_short_digits __glibcpp_u8_digits 318#define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10 319#elif __glibcpp_short_bits == 16 320#define __glibcpp_signed_short_min __glibcpp_s16_min 321#define __glibcpp_signed_short_max __glibcpp_s16_max 322#define __glibcpp_signed_short_digits __glibcpp_s16_digits 323#define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10 324#define __glibcpp_unsigned_short_min __glibcpp_u16_min 325#define __glibcpp_unsigned_short_max __glibcpp_u16_max 326#define __glibcpp_unsigned_short_digits __glibcpp_u16_digits 327#define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10 328#elif __glibcpp_short_bits == 32 329#define __glibcpp_signed_short_min (short)__glibcpp_s32_min 330#define __glibcpp_signed_short_max (short)__glibcpp_s32_max 331#define __glibcpp_signed_short_digits __glibcpp_s32_digits 332#define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10 333#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min 334#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max 335#define __glibcpp_unsigned_short_digits __glibcpp_u32_digits 336#define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10 337#elif __glibcpp_short_bits == 64 338#define __glibcpp_signed_short_min (short)__glibcpp_s64_min 339#define __glibcpp_signed_short_max (short)__glibcpp_s64_max 340#define __glibcpp_signed_short_digits __glibcpp_s64_digits 341#define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10 342#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min 343#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max 344#define __glibcpp_unsigned_short_digits __glibcpp_u64_digits 345#define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10 346#else 347// You must define these macros in the configuration file. 348#endif 349 350// int 351 352#define __glibcpp_signed_int_traps true 353#define __glibcpp_unsigned_int_traps true 354#ifndef __glibcpp_signed_int_is_modulo 355#define __glibcpp_signed_int_is_modulo true 356#endif 357#if __glibcpp_int_bits == 8 358#define __glibcpp_signed_int_min __glibcpp_s8_min 359#define __glibcpp_signed_int_max __glibcpp_s8_max 360#define __glibcpp_signed_int_digits __glibcpp_s8_digits 361#define __glibcpp_signed_int_digits10 __glibcpp_s8_digits10 362#define __glibcpp_unsigned_int_min __glibcpp_u8_min 363#define __glibcpp_unsigned_int_max __glibcpp_u8_max 364#define __glibcpp_unsigned_int_digits __glibcpp_u8_digits 365#define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10 366#elif __glibcpp_int_bits == 16 367#define __glibcpp_signed_int_min __glibcpp_s16_min 368#define __glibcpp_signed_int_max __glibcpp_s16_max 369#define __glibcpp_signed_int_digits __glibcpp_s16_digits 370#define __glibcpp_signed_int_digits10 __glibcpp_s16_digits10 371#define __glibcpp_unsigned_int_min __glibcpp_u16_min 372#define __glibcpp_unsigned_int_max __glibcpp_u16_max 373#define __glibcpp_unsigned_int_digits __glibcpp_u16_digits 374#define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10 375#elif __glibcpp_int_bits == 32 376#define __glibcpp_signed_int_min (int)__glibcpp_s32_min 377#define __glibcpp_signed_int_max (int)__glibcpp_s32_max 378#define __glibcpp_signed_int_digits __glibcpp_s32_digits 379#define __glibcpp_signed_int_digits10 __glibcpp_s32_digits10 380#define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u32_min 381#define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max 382#define __glibcpp_unsigned_int_digits __glibcpp_u32_digits 383#define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10 384#elif __glibcpp_int_bits == 64 385#define __glibcpp_signed_int_min (int)__glibcpp_s64_min 386#define __glibcpp_signed_int_max (int)__glibcpp_s64_max 387#define __glibcpp_signed_int_digits __glibcpp_s64_digits 388#define __glibcpp_signed_int_digits10 __glibcpp_s64_digits10 389#define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u64_min 390#define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u64_max 391#define __glibcpp_unsigned_int_digits __glibcpp_u64_digits 392#define __glibcpp_unsigned_int_digits10 __glibcpp_u64_digits10 393#else 394// You must define these macros in the configuration file. 395#endif 396 397// long 398 399#define __glibcpp_signed_long_traps true 400#define __glibcpp_unsigned_long_traps true 401#ifndef __glibcpp_signed_long_is_modulo 402#define __glibcpp_signed_long_is_modulo true 403#endif 404#if __glibcpp_long_bits == 8 405#define __glibcpp_signed_long_min __glibcpp_s8_min 406#define __glibcpp_signed_long_max __glibcpp_s8_max 407#define __glibcpp_signed_long_digits __glibcpp_s8_digits 408#define __glibcpp_signed_long_digits10 __glibcpp_s8_digits10 409#define __glibcpp_unsigned_long_min __glibcpp_u8_min 410#define __glibcpp_unsigned_long_max __glibcpp_u8_max 411#define __glibcpp_unsigned_long_digits __glibcpp_u8_digits 412#define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10 413#elif __glibcpp_long_bits == 16 414#define __glibcpp_signed_long_min __glibcpp_s16_min 415#define __glibcpp_signed_long_max __glibcpp_s16_max 416#define __glibcpp_signed_long_digits __glibcpp_s16_digits 417#define __glibcpp_signed_long_digits10 __glibcpp_s16_digits10 418#define __glibcpp_unsigned_long_min __glibcpp_u16_min 419#define __glibcpp_unsigned_long_max __glibcpp_u16_max 420#define __glibcpp_unsigned_long_digits __glibcpp_u16_digits 421#define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10 422#elif __glibcpp_long_bits == 32 423#define __glibcpp_signed_long_min __glibcpp_s32_min 424#define __glibcpp_signed_long_max __glibcpp_s32_max 425#define __glibcpp_signed_long_digits __glibcpp_s32_digits 426#define __glibcpp_signed_long_digits10 __glibcpp_s32_digits10 427#define __glibcpp_unsigned_long_min __glibcpp_u32_min 428#define __glibcpp_unsigned_long_max __glibcpp_u32_max 429#define __glibcpp_unsigned_long_digits __glibcpp_u32_digits 430#define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10 431#elif __glibcpp_long_bits == 64 432#define __glibcpp_signed_long_min (long)__glibcpp_s64_min 433#define __glibcpp_signed_long_max (long)__glibcpp_s64_max 434#define __glibcpp_signed_long_digits __glibcpp_s64_digits 435#define __glibcpp_signed_long_digits10 __glibcpp_s64_digits10 436#define __glibcpp_unsigned_long_min (unsigned long)__glibcpp_u64_min 437#define __glibcpp_unsigned_long_max (unsigned long)__glibcpp_u64_max 438#define __glibcpp_unsigned_long_digits __glibcpp_u64_digits 439#define __glibcpp_unsigned_long_digits10 __glibcpp_u64_digits10 440#else 441// You must define these macros in the configuration file. 442#endif 443 444// long long 445 446#define __glibcpp_signed_long_long_traps true 447#define __glibcpp_signed_long_long_traps true 448#ifndef __glibcpp_signed_long_long_is_modulo 449#define __glibcpp_signed_long_long_is_modulo true 450#endif 451#if __glibcpp_long_long_bits == 8 452#define __glibcpp_signed_long_long_min __glibcpp_s8_min 453#define __glibcpp_signed_long_long_max __glibcpp_s8_max 454#define __glibcpp_signed_long_long_digits __glibcpp_s8_digits 455#define __glibcpp_signed_long_long_digits10 __glibcpp_s8_digits10 456#define __glibcpp_unsigned_long_long_min __glibcpp_u8_min 457#define __glibcpp_unsigned_long_long_max __glibcpp_u8_max 458#define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits 459#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10 460#elif __glibcpp_long_long_bits == 16 461#define __glibcpp_signed_long_long_min __glibcpp_s16_min 462#define __glibcpp_signed_long_long_max __glibcpp_s16_max 463#define __glibcpp_signed_long_long_digits __glibcpp_s16_digits 464#define __glibcpp_signed_long_long_digits10 __glibcpp_s16_digits10 465#define __glibcpp_unsigned_long_long_min __glibcpp_u16_min 466#define __glibcpp_unsigned_long_long_max __glibcpp_u16_max 467#define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits 468#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10 469#elif __glibcpp_long_long_bits == 32 470#define __glibcpp_signed_long_long_min __glibcpp_s32_min 471#define __glibcpp_signed_long_long_max __glibcpp_s32_max 472#define __glibcpp_signed_long_long_digits __glibcpp_s32_digits 473#define __glibcpp_signed_long_long_digits10 __glibcpp_s32_digits10 474#define __glibcpp_unsigned_long_long_min __glibcpp_u32_min 475#define __glibcpp_unsigned_long_long_max __glibcpp_u32_max 476#define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits 477#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10 478#elif __glibcpp_long_long_bits == 64 479#define __glibcpp_signed_long_long_min __glibcpp_s64_min 480#define __glibcpp_signed_long_long_max __glibcpp_s64_max 481#define __glibcpp_signed_long_long_digits __glibcpp_s64_digits 482#define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10 483#define __glibcpp_signed_long_long_traps true 484#define __glibcpp_unsigned_long_long_min __glibcpp_u64_min 485#define __glibcpp_unsigned_long_long_max __glibcpp_u64_max 486#define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits 487#define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10 488#define __glibcpp_unsigned_long_long_traps true 489#else 490// You must define these macros in the configuration file. 491#endif 492 493// wchar_t 494 495#define __glibcpp_wchar_t_traps true 496#ifndef __glibcpp_wchar_t_is_modulo 497#define __glibcpp_wchar_t_is_modulo true 498#endif 499#if __glibcpp_wchar_t_is_signed 500#if __glibcpp_wchar_t_bits == 8 501#define __glibcpp_wchar_t_min __glibcpp_s8_min 502#define __glibcpp_wchar_t_max __glibcpp_s8_max 503#define __glibcpp_wchar_t_digits __glibcpp_s8_digits 504#define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10 505#elif __glibcpp_wchar_t_bits == 16 506#define __glibcpp_wchar_t_min __glibcpp_s16_min 507#define __glibcpp_wchar_t_max __glibcpp_s16_max 508#define __glibcpp_wchar_t_digits __glibcpp_s16_digits 509#define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10 510#elif __glibcpp_wchar_t_bits == 32 511#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min 512#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max 513#define __glibcpp_wchar_t_digits __glibcpp_s32_digits 514#define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10 515#elif __glibcpp_wchar_t_bits == 64 516#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min 517#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max 518#define __glibcpp_wchar_t_digits __glibcpp_s64_digits 519#define __glibcpp_wchar_t_digits10 __glibcpp_s64_digits10 520#else 521// You must define these macros in the configuration file. 522#endif 523#else 524#if __glibcpp_wchar_t_bits == 8 525#define __glibcpp_wchar_t_min __glibcpp_u8_min 526#define __glibcpp_wchar_t_max __glibcpp_u8_max 527#define __glibcpp_wchar_t_digits __glibcpp_u8_digits 528#define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10 529#elif __glibcpp_wchar_t_bits == 16 530#define __glibcpp_wchar_t_min __glibcpp_u16_min 531#define __glibcpp_wchar_t_max __glibcpp_u16_max 532#define __glibcpp_wchar_t_digits __glibcpp_u16_digits 533#define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10 534#elif __glibcpp_wchar_t_bits == 32 535#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min 536#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max 537#define __glibcpp_wchar_t_digits __glibcpp_u32_digits 538#define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10 539#elif __glibcpp_wchar_t_bits == 64 540#define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min 541#define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max 542#define __glibcpp_wchar_t_digits __glibcpp_u64_digits 543#define __glibcpp_wchar_t_digits10 __glibcpp_u64_digits10 544#else 545// You must define these macros in the configuration file. 546#endif 547#endif 548 549// float 550// 551 552#if __glibcpp_float_bits == 32 553#define __glibcpp_float_min __glibcpp_f32_min 554#define __glibcpp_float_max __glibcpp_f32_max 555#define __glibcpp_float_digits __glibcpp_f32_digits 556#define __glibcpp_float_digits10 __glibcpp_f32_digits10 557#define __glibcpp_float_radix __glibcpp_f32_radix 558#define __glibcpp_float_epsilon __glibcpp_f32_epsilon 559#define __glibcpp_float_round_error __glibcpp_f32_round_error 560#define __glibcpp_float_min_exponent __glibcpp_f32_min_exponent 561#define __glibcpp_float_min_exponent10 __glibcpp_f32_min_exponent10 562#define __glibcpp_float_max_exponent __glibcpp_f32_max_exponent 563#define __glibcpp_float_max_exponent10 __glibcpp_f32_max_exponent10 564#elif __glibcpp_float_bits == 64 565#define __glibcpp_float_min __glibcpp_f64_min 566#define __glibcpp_float_max __glibcpp_f64_max 567#define __glibcpp_float_digits __glibcpp_f64_digits 568#define __glibcpp_float_digits10 __glibcpp_f64_digits10 569#define __glibcpp_float_radix __glibcpp_f64_radix 570#define __glibcpp_float_epsilon __glibcpp_f64_epsilon 571#define __glibcpp_float_round_error __glibcpp_f64_round_error 572#define __glibcpp_float_min_exponent __glibcpp_f64_min_exponent 573#define __glibcpp_float_min_exponent10 __glibcpp_f64_min_exponent10 574#define __glibcpp_float_max_exponent __glibcpp_f64_max_exponent 575#define __glibcpp_float_max_exponent10 __glibcpp_f64_max_exponent10 576#elif __glibcpp_float_bits == 80 577#define __glibcpp_float_min __glibcpp_f80_min 578#define __glibcpp_float_max __glibcpp_f80_max 579#define __glibcpp_float_digits __glibcpp_f80_digits 580#define __glibcpp_float_digits10 __glibcpp_f80_digits10 581#define __glibcpp_float_radix __glibcpp_f80_radix 582#define __glibcpp_float_epsilon __glibcpp_f80_epsilon 583#define __glibcpp_float_round_error __glibcpp_f80_round_error 584#define __glibcpp_float_min_exponent __glibcpp_f80_min_exponent 585#define __glibcpp_float_min_exponent10 __glibcpp_f80_min_exponent10 586#define __glibcpp_float_max_exponent __glibcpp_f80_max_exponent 587#define __glibcpp_float_max_exponent10 __glibcpp_f80_max_exponent10 588#else 589// You must define these macros in the configuration file. 590#endif 591 592// FIXME: These are just stubs and inkorrect 593 594#ifndef __glibcpp_float_has_infinity 595#define __glibcpp_float_has_infinity false 596#endif 597 598#ifndef __glibcpp_float_has_quiet_NaN 599#define __glibcpp_float_has_quiet_NaN false 600#endif 601 602#ifndef __glibcpp_float_has_signaling_NaN 603#define __glibcpp_float_has_signaling_NaN false 604#endif 605 606#ifndef __glibcpp_float_has_denorm 607#define __glibcpp_float_has_denorm denorm_absent 608#endif 609 610#ifndef __glibcpp_float_has_denorm_loss 611#define __glibcpp_float_has_denorm_loss false 612#endif 613 614#ifndef __glibcpp_float_infinity 615#define __glibcpp_float_infinity 0.0F 616#endif 617 618#ifndef __glibcpp_float_quiet_NaN 619#define __glibcpp_float_quiet_NaN 0.0F 620#endif 621 622#ifndef __glibcpp_float_signaling_NaN 623#define __glibcpp_float_signaling_NaN 0.0F 624#endif 625 626#ifndef __glibcpp_float_denorm_min 627#define __glibcpp_float_denorm_min 0.0F 628#endif 629 630#ifndef __glibcpp_float_is_iec559 631#define __glibcpp_float_is_iec559 false 632#endif 633 634#ifndef __glibcpp_float_is_bounded 635#define __glibcpp_float_is_bounded true 636#endif 637 638#ifndef __glibcpp_float_is_modulo 639#define __glibcpp_float_is_modulo false 640#endif 641 642#ifndef __glibcpp_float_traps 643#define __glibcpp_float_traps false 644#endif 645 646#ifndef __glibcpp_float_tinyness_before 647#define __glibcpp_float_tinyness_before false 648#endif 649 650#ifndef __glibcpp_float_round_style 651#define __glibcpp_float_round_style round_toward_zero 652#endif 653 654// double 655 656#if __glibcpp_double_bits == 32 657#define __glibcpp_double_min __glibcpp_f32_min 658#define __glibcpp_double_max __glibcpp_f32_max 659#define __glibcpp_double_digits __glibcpp_f32_digits 660#define __glibcpp_double_digits10 __glibcpp_f32_digits10 661#define __glibcpp_double_radix __glibcpp_f32_radix 662#define __glibcpp_double_epsilon __glibcpp_f32_epsilon 663#define __glibcpp_double_round_error __glibcpp_f32_round_error 664#define __glibcpp_double_min_exponent __glibcpp_f32_min_exponent 665#define __glibcpp_double_min_exponent10 __glibcpp_f32_min_exponent10 666#define __glibcpp_double_max_exponent __glibcpp_f32_max_exponent 667#define __glibcpp_double_max_exponent10 __glibcpp_f32_max_exponent10 668#elif __glibcpp_double_bits == 64 669#define __glibcpp_double_min __glibcpp_f64_min 670#define __glibcpp_double_max __glibcpp_f64_max 671#define __glibcpp_double_digits __glibcpp_f64_digits 672#define __glibcpp_double_digits10 __glibcpp_f64_digits10 673#define __glibcpp_double_radix __glibcpp_f64_radix 674#define __glibcpp_double_epsilon __glibcpp_f64_epsilon 675#define __glibcpp_double_round_error __glibcpp_f64_round_error 676#define __glibcpp_double_min_exponent __glibcpp_f64_min_exponent 677#define __glibcpp_double_min_exponent10 __glibcpp_f64_min_exponent10 678#define __glibcpp_double_max_exponent __glibcpp_f64_max_exponent 679#define __glibcpp_double_max_exponent10 __glibcpp_f64_max_exponent10 680#elif __glibcpp_double_bits == 80 681#define __glibcpp_double_min __glibcpp_f80_min 682#define __glibcpp_double_max __glibcpp_f80_max 683#define __glibcpp_double_digits __glibcpp_f80_digits 684#define __glibcpp_double_digits10 __glibcpp_f80_digits10 685#define __glibcpp_double_radix __glibcpp_f80_radix 686#define __glibcpp_double_epsilon __glibcpp_f80_epsilon 687#define __glibcpp_double_round_error __glibcpp_f80_round_error 688#define __glibcpp_double_min_exponent __glibcpp_f80_min_exponent 689#define __glibcpp_double_min_exponent10 __glibcpp_f80_min_exponent10 690#define __glibcpp_double_max_exponent __glibcpp_f80_max_exponent 691#define __glibcpp_double_max_exponent10 __glibcpp_f80_max_exponent10 692#else 693// You must define these macros in the configuration file. 694#endif 695 696// FIXME: These are just stubs and inkorrect 697 698#ifndef __glibcpp_double_has_infinity 699#define __glibcpp_double_has_infinity false 700#endif 701 702#ifndef __glibcpp_double_has_quiet_NaN 703#define __glibcpp_double_has_quiet_NaN false 704#endif 705 706#ifndef __glibcpp_double_has_signaling_NaN 707#define __glibcpp_double_has_signaling_NaN false 708#endif 709 710#ifndef __glibcpp_double_has_denorm 711#define __glibcpp_double_has_denorm denorm_absent 712#endif 713 714#ifndef __glibcpp_double_has_denorm_loss 715#define __glibcpp_double_has_denorm_loss false 716#endif 717 718#ifndef __glibcpp_double_infinity 719#define __glibcpp_double_infinity 0.0 720#endif 721 722#ifndef __glibcpp_double_quiet_NaN 723#define __glibcpp_double_quiet_NaN 0.0 724#endif 725 726#ifndef __glibcpp_double_signaling_NaN 727#define __glibcpp_double_signaling_NaN 0.0 728#endif 729 730#ifndef __glibcpp_double_denorm_min 731#define __glibcpp_double_denorm_min 0.0 732#endif 733 734#ifndef __glibcpp_double_is_iec559 735#define __glibcpp_double_is_iec559 false 736#endif 737 738#ifndef __glibcpp_double_is_bounded 739#define __glibcpp_double_is_bounded true 740#endif 741 742#ifndef __glibcpp_double_is_modulo 743#define __glibcpp_double_is_modulo false 744#endif 745 746#ifndef __glibcpp_double_traps 747#define __glibcpp_double_traps false 748#endif 749 750#ifndef __glibcpp_double_tinyness_before 751#define __glibcpp_double_tinyness_before false 752#endif 753 754#ifndef __glibcpp_double_round_style 755#define __glibcpp_double_round_style round_toward_zero 756#endif 757 758// long double 759 760#if __glibcpp_long_double_bits == 32 761#define __glibcpp_long_double_min __glibcpp_f32_min 762#define __glibcpp_long_double_max __glibcpp_f32_max 763#define __glibcpp_long_double_digits __glibcpp_f32_digits 764#define __glibcpp_long_double_digits10 __glibcpp_f32_digits10 765#define __glibcpp_long_double_radix __glibcpp_f32_radix 766#define __glibcpp_long_double_epsilon __glibcpp_f32_epsilon 767#define __glibcpp_long_double_round_error __glibcpp_f32_round_error 768#define __glibcpp_long_double_min_exponent __glibcpp_f32_min_exponent 769#define __glibcpp_long_double_min_exponent10 __glibcpp_f32_min_exponent10 770#define __glibcpp_long_double_max_exponent __glibcpp_f32_max_exponent 771#define __glibcpp_long_double_max_exponent10 __glibcpp_f32_max_exponent10 772#elif __glibcpp_long_double_bits == 64 773#define __glibcpp_long_double_min __glibcpp_f64_min 774#define __glibcpp_long_double_max __glibcpp_f64_max 775#define __glibcpp_long_double_digits __glibcpp_f64_digits 776#define __glibcpp_long_double_digits10 __glibcpp_f64_digits10 777#define __glibcpp_long_double_radix __glibcpp_f64_radix 778#define __glibcpp_long_double_epsilon __glibcpp_f64_epsilon 779#define __glibcpp_long_double_round_error __glibcpp_f64_round_error 780#define __glibcpp_long_double_min_exponent __glibcpp_f64_min_exponent 781#define __glibcpp_long_double_min_exponent10 __glibcpp_f64_min_exponent10 782#define __glibcpp_long_double_max_exponent __glibcpp_f64_max_exponent 783#define __glibcpp_long_double_max_exponent10 __glibcpp_f64_max_exponent10 784#elif __glibcpp_long_double_bits == 80 785#define __glibcpp_long_double_min __glibcpp_f80_min 786#define __glibcpp_long_double_max __glibcpp_f80_max 787#define __glibcpp_long_double_digits __glibcpp_f80_digits 788#define __glibcpp_long_double_digits10 __glibcpp_f80_digits10 789#define __glibcpp_long_double_radix __glibcpp_f80_radix 790#define __glibcpp_long_double_epsilon __glibcpp_f80_epsilon 791#define __glibcpp_long_double_round_error __glibcpp_f80_round_error 792#define __glibcpp_long_double_min_exponent __glibcpp_f80_min_exponent 793#define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10 794#define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent 795#define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10 796#elif __glibcpp_long_double_bits == 96 797#define __glibcpp_long_double_min __glibcpp_f96_min 798#define __glibcpp_long_double_max __glibcpp_f96_max 799#define __glibcpp_long_double_digits __glibcpp_f96_digits 800#define __glibcpp_long_double_digits10 __glibcpp_f96_digits10 801#define __glibcpp_long_double_radix __glibcpp_f96_radix 802#define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon 803#define __glibcpp_long_double_round_error __glibcpp_f96_round_error 804#define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent 805#define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10 806#define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent 807#define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10 808#elif __glibcpp_long_double_bits == 128 809#define __glibcpp_long_double_min __glibcpp_f128_min 810#define __glibcpp_long_double_max __glibcpp_f128_max 811#define __glibcpp_long_double_digits __glibcpp_f128_digits 812#define __glibcpp_long_double_digits10 __glibcpp_f128_digits10 813#define __glibcpp_long_double_radix __glibcpp_f128_radix 814#define __glibcpp_long_double_epsilon __glibcpp_f128_epsilon 815#define __glibcpp_long_double_round_error __glibcpp_f128_round_error 816#define __glibcpp_long_double_min_exponent __glibcpp_f128_min_exponent 817#define __glibcpp_long_double_min_exponent10 __glibcpp_f128_min_exponent10 818#define __glibcpp_long_double_max_exponent __glibcpp_f128_max_exponent 819#define __glibcpp_long_double_max_exponent10 __glibcpp_f128_max_exponent10 820#else 821// You must define these macros in the configuration file. 822#endif 823 824// FIXME: These are just stubs and inkorrect 825 826#ifndef __glibcpp_long_double_has_infinity 827#define __glibcpp_long_double_has_infinity false 828#endif 829 830#ifndef __glibcpp_long_double_has_quiet_NaN 831#define __glibcpp_long_double_has_quiet_NaN false 832#endif 833 834#ifndef __glibcpp_long_double_has_signaling_NaN 835#define __glibcpp_long_double_has_signaling_NaN false 836#endif 837 838#ifndef __glibcpp_long_double_has_denorm 839#define __glibcpp_long_double_has_denorm denorm_absent 840#endif 841 842#ifndef __glibcpp_long_double_has_denorm_loss 843#define __glibcpp_long_double_has_denorm_loss false 844#endif 845 846#ifndef __glibcpp_long_double_infinity 847#define __glibcpp_long_double_infinity 0.0L 848#endif 849 850#ifndef __glibcpp_long_double_quiet_NaN 851#define __glibcpp_long_double_quiet_NaN 0.0L 852#endif 853 854#ifndef __glibcpp_long_double_signaling_NaN 855#define __glibcpp_long_double_signaling_NaN 0.0L 856#endif 857 858#ifndef __glibcpp_long_double_denorm_min 859#define __glibcpp_long_double_denorm_min 0.0L 860#endif 861 862#ifndef __glibcpp_long_double_is_iec559 863#define __glibcpp_long_double_is_iec559 false 864#endif 865 866#ifndef __glibcpp_long_double_is_bounded 867#define __glibcpp_long_double_is_bounded true 868#endif 869 870#ifndef __glibcpp_long_double_is_modulo 871#define __glibcpp_long_double_is_modulo false 872#endif 873 874#ifndef __glibcpp_long_double_traps 875#define __glibcpp_long_double_traps false 876#endif 877 878#ifndef __glibcpp_long_double_tinyness_before 879#define __glibcpp_long_double_tinyness_before false 880#endif 881 882#ifndef __glibcpp_long_double_round_style 883#define __glibcpp_long_double_round_style round_toward_zero 884#endif 885 886 887namespace std 888{ 889 enum float_round_style 890 { 891 round_indeterminate = -1, 892 round_toward_zero = 0, 893 round_to_nearest = 1, 894 round_toward_infinity = 2, 895 round_toward_neg_infinity = 3 896 }; 897 898 enum float_denorm_style 899 { 900 denorm_indeterminate = -1, 901 denorm_absent = 0, 902 denorm_present = 1 903 }; 904 905 // 906 // The primary class traits 907 // 908 struct __numeric_limits_base 909 { 910 static const bool is_specialized = false; 911 912 static const int digits = 0; 913 static const int digits10 = 0; 914 static const bool is_signed = false; 915 static const bool is_integer = false; 916 static const bool is_exact = false; 917 static const int radix = 0; 918 919 static const int min_exponent = 0; 920 static const int min_exponent10 = 0; 921 static const int max_exponent = 0; 922 static const int max_exponent10 = 0; 923 924 static const bool has_infinity = false; 925 static const bool has_quiet_NaN = false; 926 static const bool has_signaling_NaN = false; 927 static const float_denorm_style has_denorm = denorm_absent; 928 static const bool has_denorm_loss = false; 929 930 static const bool is_iec559 = false; 931 static const bool is_bounded = false; 932 static const bool is_modulo = false; 933 934 static const bool traps = false; 935 static const bool tinyness_before = false; 936 static const float_round_style round_style = round_toward_zero; 937 }; 938 939 template<typename _Tp> 940 struct numeric_limits : public __numeric_limits_base 941 { 942 static _Tp min() throw() { return static_cast<_Tp>(0); } 943 static _Tp max() throw() { return static_cast<_Tp>(0); } 944 static _Tp epsilon() throw() { return static_cast<_Tp>(0); } 945 static _Tp round_error() throw() { return static_cast<_Tp>(0); } 946 static _Tp infinity() throw() { return static_cast<_Tp>(0); } 947 static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); } 948 static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); } 949 static _Tp denorm_min() throw() { return static_cast<_Tp>(0); } 950 }; 951 952 // Now there follow 15 explicit specializations. Yes, 15. Make sure 953 // you get the count right. 954 template<> 955 struct numeric_limits<bool> 956 { 957 static const bool is_specialized = true; 958 959 static bool min() throw() 960 { return false; } 961 962 static bool max() throw() 963 { return true; } 964 965 static const int digits = __glibcpp_bool_digits; 966 static const int digits10 = 0; 967 static const bool is_signed = false; 968 static const bool is_integer = true; 969 static const bool is_exact = true; 970 static const int radix = 2; 971 static bool epsilon() throw() 972 { return false; } 973 static bool round_error() throw() 974 { return false; } 975 976 static const int min_exponent = 0; 977 static const int min_exponent10 = 0; 978 static const int max_exponent = 0; 979 static const int max_exponent10 = 0; 980 981 static const bool has_infinity = false; 982 static const bool has_quiet_NaN = false; 983 static const bool has_signaling_NaN = false; 984 static const float_denorm_style has_denorm = denorm_absent; 985 static const bool has_denorm_loss = false; 986 987 static bool infinity() throw() 988 { return false; } 989 static bool quiet_NaN() throw() 990 { return false; } 991 static bool signaling_NaN() throw() 992 { return false; } 993 static bool denorm_min() throw() 994 { return false; } 995 996 static const bool is_iec559 = false; 997 static const bool is_bounded = true; 998 static const bool is_modulo = false; 999 1000 // It is not clear what it means for a boolean type to trap. 1001 // This is a DR on the LWG issue list. Here, I use integer 1002 // promotion semantics. 1003 static const bool traps = __glibcpp_signed_int_traps 1004 || __glibcpp_signed_long_traps; 1005 static const bool tinyness_before = false; 1006 static const float_round_style round_style = round_toward_zero; 1007 }; 1008 1009#undef __glibcpp_bool_digits 1010 1011 template<> 1012 struct numeric_limits<char> 1013 { 1014 static const bool is_specialized = true; 1015 1016 static char min() throw() 1017 { return __glibcpp_char_min; } 1018 static char max() throw() 1019 { return __glibcpp_char_max; } 1020 1021 static const int digits = __glibcpp_char_digits; 1022 static const int digits10 = __glibcpp_char_digits10; 1023 static const bool is_signed = __glibcpp_plain_char_is_signed; 1024 static const bool is_integer = true; 1025 static const bool is_exact = true; 1026 static const int radix = 2; 1027 static char epsilon() throw() 1028 { return char(); } 1029 static char round_error() throw() 1030 { return char(); } 1031 1032 static const int min_exponent = 0; 1033 static const int min_exponent10 = 0; 1034 static const int max_exponent = 0; 1035 static const int max_exponent10 = 0; 1036 1037 static const bool has_infinity = false; 1038 static const bool has_quiet_NaN = false; 1039 static const bool has_signaling_NaN = false; 1040 static const float_denorm_style has_denorm = denorm_absent; 1041 static const bool has_denorm_loss = false; 1042 1043 static char infinity() throw() 1044 { return char(); } 1045 static char quiet_NaN() throw() 1046 { return char(); } 1047 static char signaling_NaN() throw() 1048 { return char(); } 1049 static char denorm_min() throw() 1050 { return static_cast<char>(0); } 1051 1052 static const bool is_iec559 = false; 1053 static const bool is_bounded = true; 1054 static const bool is_modulo = __glibcpp_char_is_modulo; 1055 1056 static const bool traps = __glibcpp_char_traps; 1057 static const bool tinyness_before = false; 1058 static const float_round_style round_style = round_toward_zero; 1059 }; 1060 1061#undef __glibcpp_char_min 1062#undef __glibcpp_char_max 1063#undef __glibcpp_char_digits 1064#undef __glibcpp_char_digits10 1065#undef __glibcpp_char_is_signed 1066#undef __glibcpp_char_is_modulo 1067#undef __glibcpp_char_traps 1068 1069 1070 1071 template<> 1072 struct numeric_limits<signed char> 1073 { 1074 static const bool is_specialized = true; 1075 1076 static signed char min() throw() 1077 { return __glibcpp_signed_char_min; } 1078 static signed char max() throw() 1079 { return __glibcpp_signed_char_max; } 1080 1081 static const int digits = __glibcpp_signed_char_digits; 1082 static const int digits10 = __glibcpp_signed_char_digits10; 1083 static const bool is_signed = true; 1084 static const bool is_integer = true; 1085 static const bool is_exact = true; 1086 static const int radix = 2; 1087 static signed char epsilon() throw() 1088 { return 0; } 1089 static signed char round_error() throw() 1090 { return 0; } 1091 1092 static const int min_exponent = 0; 1093 static const int min_exponent10 = 0; 1094 static const int max_exponent = 0; 1095 static const int max_exponent10 = 0; 1096 1097 static const bool has_infinity = false; 1098 static const bool has_quiet_NaN = false; 1099 static const bool has_signaling_NaN = false; 1100 static const float_denorm_style has_denorm = denorm_absent; 1101 static const bool has_denorm_loss = false; 1102 1103 static signed char infinity() throw() 1104 { return static_cast<signed char>(0); } 1105 static signed char quiet_NaN() throw() 1106 { return static_cast<signed char>(0); } 1107 static signed char signaling_NaN() throw() 1108 { return static_cast<signed char>(0); } 1109 static signed char denorm_min() throw() 1110 { return static_cast<signed char>(0); } 1111 1112 static const bool is_iec559 = false; 1113 static const bool is_bounded = true; 1114 static const bool is_modulo = __glibcpp_signed_char_is_modulo; 1115 1116 static const bool traps = __glibcpp_signed_char_traps; 1117 static const bool tinyness_before = false; 1118 static const float_round_style round_style = round_toward_zero; 1119 }; 1120 1121#undef __glibcpp_signed_char_min 1122#undef __glibcpp_signed_char_max 1123#undef __glibcpp_signed_char_digits 1124#undef __glibcpp_signed_char_digits10 1125#undef __glibcpp_signed_char_is_modulo 1126#undef __glibcpp_signed_char_traps 1127 1128 template<> 1129 struct numeric_limits<unsigned char> 1130 { 1131 static const bool is_specialized = true; 1132 1133 static unsigned char min() throw() 1134 { return 0; } 1135 static unsigned char max() throw() 1136 { return __glibcpp_unsigned_char_max; } 1137 1138 static const int digits = __glibcpp_unsigned_char_digits; 1139 static const int digits10 = __glibcpp_unsigned_char_digits10; 1140 static const bool is_signed = false; 1141 static const bool is_integer = true; 1142 static const bool is_exact = true; 1143 static const int radix = 2; 1144 static unsigned char epsilon() throw() 1145 { return 0; } 1146 static unsigned char round_error() throw() 1147 { return 0; } 1148 1149 static const int min_exponent = 0; 1150 static const int min_exponent10 = 0; 1151 static const int max_exponent = 0; 1152 static const int max_exponent10 = 0; 1153 1154 static const bool has_infinity = false; 1155 static const bool has_quiet_NaN = false; 1156 static const bool has_signaling_NaN = false; 1157 static const float_denorm_style has_denorm = denorm_absent; 1158 static const bool has_denorm_loss = false; 1159 1160 static unsigned char infinity() throw() 1161 { return static_cast<unsigned char>(0); } 1162 static unsigned char quiet_NaN() throw() 1163 { return static_cast<unsigned char>(0); } 1164 static unsigned char signaling_NaN() throw() 1165 { return static_cast<unsigned char>(0); } 1166 static unsigned char denorm_min() throw() 1167 { return static_cast<unsigned char>(0); } 1168 1169 static const bool is_iec559 = false; 1170 static const bool is_bounded = true; 1171 static const bool is_modulo = true; 1172 1173 static const bool traps = __glibcpp_unsigned_char_traps; 1174 static const bool tinyness_before = false; 1175 static const float_round_style round_style = round_toward_zero; 1176 }; 1177 1178#undef __glibcpp_unsigned_char_max 1179#undef __glibcpp_unsigned_char_digits 1180#undef __glibcpp_unsigned_char_digits10 1181#undef __glibcpp_unsigned_char_traps 1182 1183 template<> 1184 struct numeric_limits<wchar_t> 1185 { 1186 static const bool is_specialized = true; 1187 1188 static wchar_t min() throw() 1189 { return __glibcpp_wchar_t_min; } 1190 static wchar_t max() throw() 1191 { return __glibcpp_wchar_t_max; } 1192 1193 static const int digits = __glibcpp_wchar_t_digits; 1194 static const int digits10 = __glibcpp_wchar_t_digits10; 1195 static const bool is_signed = __glibcpp_wchar_t_is_signed; 1196 static const bool is_integer = true; 1197 static const bool is_exact = true; 1198 static const int radix = 2; 1199 static wchar_t epsilon() throw() 1200 { return 0; } 1201 static wchar_t round_error() throw() 1202 { return 0; } 1203 1204 static const int min_exponent = 0; 1205 static const int min_exponent10 = 0; 1206 static const int max_exponent = 0; 1207 static const int max_exponent10 = 0; 1208 1209 static const bool has_infinity = false; 1210 static const bool has_quiet_NaN = false; 1211 static const bool has_signaling_NaN = false; 1212 static const float_denorm_style has_denorm = denorm_absent; 1213 static const bool has_denorm_loss = false; 1214 1215 static wchar_t infinity() throw() 1216 { return wchar_t(); } 1217 static wchar_t quiet_NaN() throw() 1218 { return wchar_t(); } 1219 static wchar_t signaling_NaN() throw() 1220 { return wchar_t(); } 1221 static wchar_t denorm_min() throw() 1222 { return wchar_t(); } 1223 1224 static const bool is_iec559 = false; 1225 static const bool is_bounded = true; 1226 static const bool is_modulo = __glibcpp_wchar_t_is_modulo; 1227 1228 static const bool traps = __glibcpp_wchar_t_traps; 1229 static const bool tinyness_before = false; 1230 static const float_round_style round_style = round_toward_zero; 1231 }; 1232 1233#undef __glibcpp_wchar_t_min 1234#undef __glibcpp_wchar_t_max 1235#undef __glibcpp_wchar_t_digits 1236#undef __glibcpp_wchar_t_digits10 1237#undef __glibcpp_wchar_t_is_signed 1238#undef __glibcpp_wchar_t_is_modulo 1239#undef __glibcpp_wchar_t_traps 1240 1241 template<> 1242 struct numeric_limits<short> 1243 { 1244 static const bool is_specialized = true; 1245 1246 static short min() throw() 1247 { return __glibcpp_signed_short_min; } 1248 static short max() throw() 1249 { return __glibcpp_signed_short_max; } 1250 1251 static const int digits = __glibcpp_signed_short_digits; 1252 static const int digits10 = __glibcpp_signed_short_digits10; 1253 static const bool is_signed = true; 1254 static const bool is_integer = true; 1255 static const bool is_exact = true; 1256 static const int radix = 2; 1257 static short epsilon() throw() 1258 { return 0; } 1259 static short round_error() throw() 1260 { return 0; } 1261 1262 static const int min_exponent = 0; 1263 static const int min_exponent10 = 0; 1264 static const int max_exponent = 0; 1265 static const int max_exponent10 = 0; 1266 1267 static const bool has_infinity = false; 1268 static const bool has_quiet_NaN = false; 1269 static const bool has_signaling_NaN = false; 1270 static const float_denorm_style has_denorm = denorm_absent; 1271 static const bool has_denorm_loss = false; 1272 1273 static short infinity() throw() 1274 { return short(); } 1275 static short quiet_NaN() throw() 1276 { return short(); } 1277 static short signaling_NaN() throw() 1278 { return short(); } 1279 static short denorm_min() throw() 1280 { return short(); } 1281 1282 static const bool is_iec559 = true; 1283 static const bool is_bounded = true; 1284 static const bool is_modulo = __glibcpp_signed_short_is_modulo; 1285 1286 static const bool traps = __glibcpp_signed_short_traps; 1287 static const bool tinyness_before = false; 1288 static const float_round_style round_style = round_toward_zero; 1289 }; 1290 1291#undef __glibcpp_signed_short_min 1292#undef __glibcpp_signed_short_max 1293#undef __glibcpp_signed_short_digits 1294#undef __glibcpp_signed_short_digits10 1295#undef __glibcpp_signed_short_is_modulo 1296#undef __glibcpp_signed_short_traps 1297 1298 template<> 1299 struct numeric_limits<unsigned short> 1300 { 1301 static const bool is_specialized = true; 1302 1303 static unsigned short min() throw() 1304 { return 0; } 1305 static unsigned short max() throw() 1306 { return __glibcpp_unsigned_short_max; } 1307 1308 static const int digits = __glibcpp_unsigned_short_digits; 1309 static const int digits10 = __glibcpp_unsigned_short_digits10; 1310 static const bool is_signed = false; 1311 static const bool is_integer = true; 1312 static const bool is_exact = true; 1313 static const int radix = 2; 1314 static unsigned short epsilon() throw() 1315 { return 0; } 1316 static unsigned short round_error() throw() 1317 { return 0; } 1318 1319 static const int min_exponent = 0; 1320 static const int min_exponent10 = 0; 1321 static const int max_exponent = 0; 1322 static const int max_exponent10 = 0; 1323 1324 static const bool has_infinity = false; 1325 static const bool has_quiet_NaN = false; 1326 static const bool has_signaling_NaN = false; 1327 static const float_denorm_style has_denorm = denorm_absent; 1328 static const bool has_denorm_loss = false; 1329 1330 static unsigned short infinity() throw() 1331 { return static_cast<unsigned short>(0); } 1332 static unsigned short quiet_NaN() throw() 1333 { return static_cast<unsigned short>(0); } 1334 static unsigned short signaling_NaN() throw() 1335 { return static_cast<unsigned short>(0); } 1336 static unsigned short denorm_min() throw() 1337 { return static_cast<unsigned short>(0); } 1338 1339 static const bool is_iec559 = true; 1340 static const bool is_bounded = true; 1341 static const bool is_modulo = true; 1342 1343 static const bool traps = __glibcpp_unsigned_short_traps; 1344 static const bool tinyness_before = false; 1345 static const float_round_style round_style = round_toward_zero; 1346 }; 1347 1348#undef __glibcpp_unsigned_short_max 1349#undef __glibcpp_unsigned_short_digits 1350#undef __glibcpp_unsigned_short_digits10 1351#undef __glibcpp_unsigned_short_traps 1352 1353 template<> 1354 struct numeric_limits<int> 1355 { 1356 static const bool is_specialized = true; 1357 1358 static int min() throw() 1359 { return __glibcpp_signed_int_min; } 1360 static int max() throw() 1361 { return __glibcpp_signed_int_max; } 1362 1363 static const int digits = __glibcpp_signed_int_digits; 1364 static const int digits10 = __glibcpp_signed_int_digits10; 1365 static const bool is_signed = true; 1366 static const bool is_integer = true; 1367 static const bool is_exact = true; 1368 static const int radix = 2; 1369 static int epsilon() throw() 1370 { return 0; } 1371 static int round_error() throw() 1372 { return 0; } 1373 1374 static const int min_exponent = 0; 1375 static const int min_exponent10 = 0; 1376 static const int max_exponent = 0; 1377 static const int max_exponent10 = 0; 1378 1379 static const bool has_infinity = false; 1380 static const bool has_quiet_NaN = false; 1381 static const bool has_signaling_NaN = false; 1382 static const float_denorm_style has_denorm = denorm_absent; 1383 static const bool has_denorm_loss = false; 1384 1385 static int infinity() throw() 1386 { return static_cast<int>(0); } 1387 static int quiet_NaN() throw() 1388 { return static_cast<int>(0); } 1389 static int signaling_NaN() throw() 1390 { return static_cast<int>(0); } 1391 static int denorm_min() throw() 1392 { return static_cast<int>(0); } 1393 1394 static const bool is_iec559 = true; 1395 static const bool is_bounded = true; 1396 static const bool is_modulo = __glibcpp_signed_int_is_modulo; 1397 1398 static const bool traps = __glibcpp_signed_int_traps; 1399 static const bool tinyness_before = false; 1400 static const float_round_style round_style = round_toward_zero; 1401 }; 1402 1403#undef __glibcpp_signed_int_min 1404#undef __glibcpp_signed_int_max 1405#undef __glibcpp_signed_int_digits 1406#undef __glibcpp_signed_int_digits10 1407#undef __glibcpp_signed_int_is_modulo 1408#undef __glibcpp_signed_int_traps 1409 1410 template<> 1411 struct numeric_limits<unsigned int> 1412 { 1413 static const bool is_specialized = true; 1414 1415 static unsigned int min() throw() 1416 { return 0; } 1417 static unsigned int max() throw() 1418 { return __glibcpp_unsigned_int_max; } 1419 1420 static const int digits = __glibcpp_unsigned_int_digits; 1421 static const int digits10 = __glibcpp_unsigned_int_digits10; 1422 static const bool is_signed = false; 1423 static const bool is_integer = true; 1424 static const bool is_exact = true; 1425 static const int radix = 2; 1426 static unsigned int epsilon() throw() 1427 { return 0; } 1428 static unsigned int round_error() throw() 1429 { return 0; } 1430 1431 static const int min_exponent = 0; 1432 static const int min_exponent10 = 0; 1433 static const int max_exponent = 0; 1434 static const int max_exponent10 = 0; 1435 1436 static const bool has_infinity = false; 1437 static const bool has_quiet_NaN = false; 1438 static const bool has_signaling_NaN = false; 1439 static const float_denorm_style has_denorm = denorm_absent; 1440 static const bool has_denorm_loss = false; 1441 1442 static unsigned int infinity() throw() 1443 { return static_cast<unsigned int>(0); } 1444 static unsigned int quiet_NaN() throw() 1445 { return static_cast<unsigned int>(0); } 1446 static unsigned int signaling_NaN() throw() 1447 { return static_cast<unsigned int>(0); } 1448 static unsigned int denorm_min() throw() 1449 { return static_cast<unsigned int>(0); } 1450 1451 static const bool is_iec559 = true; 1452 static const bool is_bounded = true; 1453 static const bool is_modulo = true; 1454 1455 static const bool traps = __glibcpp_unsigned_int_traps; 1456 static const bool tinyness_before = false; 1457 static const float_round_style round_style = round_toward_zero; 1458 }; 1459 1460#undef __glibcpp_unsigned_int_max 1461#undef __glibcpp_unsigned_int_digits 1462#undef __glibcpp_unsigned_int_digits10 1463#undef __glibcpp_unsigned_int_traps 1464 1465 template<> 1466 struct numeric_limits<long> 1467 { 1468 static const bool is_specialized = true; 1469 1470 static long min() throw() 1471 { return __glibcpp_signed_long_min; } 1472 static long max() throw() 1473 { return __glibcpp_signed_long_max; } 1474 1475 static const int digits = __glibcpp_signed_long_digits; 1476 static const int digits10 = __glibcpp_signed_long_digits10; 1477 static const bool is_signed = true; 1478 static const bool is_integer = true; 1479 static const bool is_exact = true; 1480 static const int radix = 2; 1481 static long epsilon() throw() 1482 { return 0; } 1483 static long round_error() throw() 1484 { return 0; } 1485 1486 static const int min_exponent = 0; 1487 static const int min_exponent10 = 0; 1488 static const int max_exponent = 0; 1489 static const int max_exponent10 = 0; 1490 1491 static const bool has_infinity = false; 1492 static const bool has_quiet_NaN = false; 1493 static const bool has_signaling_NaN = false; 1494 static const float_denorm_style has_denorm = denorm_absent; 1495 static const bool has_denorm_loss = false; 1496 1497 static long infinity() throw() 1498 { return static_cast<long>(0); } 1499 static long quiet_NaN() throw() 1500 { return static_cast<long>(0); } 1501 static long signaling_NaN() throw() 1502 { return static_cast<long>(0); } 1503 static long denorm_min() throw() 1504 { return static_cast<long>(0); } 1505 1506 static const bool is_iec559 = true; 1507 static const bool is_bounded = true; 1508 static const bool is_modulo = __glibcpp_signed_long_is_modulo; 1509 1510 static const bool traps = __glibcpp_signed_long_traps; 1511 static const bool tinyness_before = false; 1512 static const float_round_style round_style = round_toward_zero; 1513 }; 1514 1515#undef __glibcpp_signed_long_min 1516#undef __glibcpp_signed_long_max 1517#undef __glibcpp_signed_long_digits 1518#undef __glibcpp_signed_long_digits10 1519#undef __glibcpp_signed_long_is_modulo 1520#undef __glibcpp_signed_long_traps 1521 1522 template<> 1523 struct numeric_limits<unsigned long> 1524 { 1525 static const bool is_specialized = true; 1526 1527 static unsigned long min() throw() 1528 { return 0; } 1529 static unsigned long max() throw() 1530 { return __glibcpp_unsigned_long_max; } 1531 1532 static const int digits = __glibcpp_unsigned_long_digits; 1533 static const int digits10 = __glibcpp_unsigned_long_digits10; 1534 static const bool is_signed = false; 1535 static const bool is_integer = true; 1536 static const bool is_exact = true; 1537 static const int radix = 2; 1538 static unsigned long epsilon() throw() 1539 { return 0; } 1540 static unsigned long round_error() throw() 1541 { return 0; } 1542 1543 static const int min_exponent = 0; 1544 static const int min_exponent10 = 0; 1545 static const int max_exponent = 0; 1546 static const int max_exponent10 = 0; 1547 1548 static const bool has_infinity = false; 1549 static const bool has_quiet_NaN = false; 1550 static const bool has_signaling_NaN = false; 1551 static const float_denorm_style has_denorm = denorm_absent; 1552 static const bool has_denorm_loss = false; 1553 1554 static unsigned long infinity() throw() 1555 { return static_cast<unsigned long>(0); } 1556 static unsigned long quiet_NaN() throw() 1557 { return static_cast<unsigned long>(0); } 1558 static unsigned long signaling_NaN() throw() 1559 { return static_cast<unsigned long>(0); } 1560 static unsigned long denorm_min() throw() 1561 { return static_cast<unsigned long>(0); } 1562 1563 static const bool is_iec559 = true; 1564 static const bool is_bounded = true; 1565 static const bool is_modulo = true; 1566 1567 static const bool traps = __glibcpp_unsigned_long_traps; 1568 static const bool tinyness_before = false; 1569 static const float_round_style round_style = round_toward_zero; 1570 }; 1571 1572#undef __glibcpp_unsigned_long_max 1573#undef __glibcpp_unsigned_long_digits 1574#undef __glibcpp_unsigned_long_digits10 1575#undef __glibcpp_unsigned_long_traps 1576 1577 template<> 1578 struct numeric_limits<long long> 1579 { 1580 static const bool is_specialized = true; 1581 1582 static long long min() throw() 1583 { return __glibcpp_signed_long_long_min; } 1584 static long long max() throw() 1585 { return __glibcpp_signed_long_long_max; } 1586 1587 static const int digits = __glibcpp_signed_long_long_digits; 1588 static const int digits10 = __glibcpp_signed_long_long_digits10; 1589 static const bool is_signed = true; 1590 static const bool is_integer = true; 1591 static const bool is_exact = true; 1592 static const int radix = 2; 1593 static long long epsilon() throw() 1594 { return 0; } 1595 static long long round_error() throw() 1596 { return 0; } 1597 1598 static const int min_exponent = 0; 1599 static const int min_exponent10 = 0; 1600 static const int max_exponent = 0; 1601 static const int max_exponent10 = 0; 1602 1603 static const bool has_infinity = false; 1604 static const bool has_quiet_NaN = false; 1605 static const bool has_signaling_NaN = false; 1606 static const float_denorm_style has_denorm = denorm_absent; 1607 static const bool has_denorm_loss = false; 1608 1609 static long long infinity() throw() 1610 { return static_cast<long long>(0); } 1611 static long long quiet_NaN() throw() 1612 { return static_cast<long long>(0); } 1613 static long long signaling_NaN() throw() 1614 { return static_cast<long long>(0); } 1615 static long long denorm_min() throw() 1616 { return static_cast<long long>(0); } 1617 1618 static const bool is_iec559 = true; 1619 static const bool is_bounded = true; 1620 static const bool is_modulo = __glibcpp_signed_long_long_is_modulo; 1621 1622 static const bool traps = __glibcpp_signed_long_long_traps; 1623 static const bool tinyness_before = false; 1624 static const float_round_style round_style = round_toward_zero; 1625 }; 1626 1627#undef __glibcpp_signed_long_long_min 1628#undef __glibcpp_signed_long_long_max 1629#undef __glibcpp_signed_long_long_digits 1630#undef __glibcpp_signed_long_long_digits10 1631#undef __glibcpp_signed_long_long_is_modulo 1632#undef __glibcpp_signed_long_long_traps 1633 1634 template<> 1635 struct numeric_limits<unsigned long long> 1636 { 1637 static const bool is_specialized = true; 1638 1639 static unsigned long long min() throw() 1640 { return 0; } 1641 static unsigned long long max() throw() 1642 { return __glibcpp_unsigned_long_long_max; } 1643 1644 static const int digits = __glibcpp_unsigned_long_long_digits; 1645 static const int digits10 = __glibcpp_unsigned_long_long_digits10; 1646 static const bool is_signed = false; 1647 static const bool is_integer = true; 1648 static const bool is_exact = true; 1649 static const int radix = 2; 1650 static unsigned long long epsilon() throw() 1651 { return 0; } 1652 static unsigned long long round_error() throw() 1653 { return 0; } 1654 1655 static const int min_exponent = 0; 1656 static const int min_exponent10 = 0; 1657 static const int max_exponent = 0; 1658 static const int max_exponent10 = 0; 1659 1660 static const bool has_infinity = false; 1661 static const bool has_quiet_NaN = false; 1662 static const bool has_signaling_NaN = false; 1663 static const float_denorm_style has_denorm = denorm_absent; 1664 static const bool has_denorm_loss = false; 1665 1666 static unsigned long long infinity() throw() 1667 { return static_cast<unsigned long long>(0); } 1668 static unsigned long long quiet_NaN() throw() 1669 { return static_cast<unsigned long long>(0); } 1670 static unsigned long long signaling_NaN() throw() 1671 { return static_cast<unsigned long long>(0); } 1672 static unsigned long long denorm_min() throw() 1673 { return static_cast<unsigned long long>(0); } 1674 1675 static const bool is_iec559 = true; 1676 static const bool is_bounded = true; 1677 static const bool is_modulo = true; 1678 1679 static const bool traps = true; 1680 static const bool tinyness_before = false; 1681 static const float_round_style round_style = round_toward_zero; 1682 }; 1683 1684#undef __glibcpp_unsigned_long_long_max 1685#undef __glibcpp_unsigned_long_long_digits 1686#undef __glibcpp_unsigned_long_long_digits10 1687#undef __glibcpp_unsigned_long_long_traps 1688 1689 template<> 1690 struct numeric_limits<float> 1691 { 1692 static const bool is_specialized = true; 1693 1694 static float min() throw() 1695 { return __glibcpp_float_min; } 1696 static float max() throw() 1697 { return __glibcpp_float_max; } 1698 1699 static const int digits = __glibcpp_float_digits; 1700 static const int digits10 = __glibcpp_float_digits10; 1701 static const bool is_signed = true; 1702 static const bool is_integer = false; 1703 static const bool is_exact = false; 1704 static const int radix = __glibcpp_float_radix; 1705 static float epsilon() throw() 1706 { return __glibcpp_float_epsilon; } 1707 static float round_error() throw() 1708 { return __glibcpp_float_round_error; } 1709 1710 static const int min_exponent = __glibcpp_float_min_exponent; 1711 static const int min_exponent10 = __glibcpp_float_min_exponent10; 1712 static const int max_exponent = __glibcpp_float_max_exponent; 1713 static const int max_exponent10 = __glibcpp_float_max_exponent10; 1714 1715 static const bool has_infinity = __glibcpp_float_has_infinity; 1716 static const bool has_quiet_NaN = __glibcpp_float_has_quiet_NaN; 1717 static const bool has_signaling_NaN = __glibcpp_float_has_signaling_NaN; 1718 static const float_denorm_style has_denorm = __glibcpp_float_has_denorm; 1719 static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss; 1720 1721 static float infinity() throw() 1722 { return __glibcpp_float_infinity; } 1723 static float quiet_NaN() throw() 1724 { return __glibcpp_float_quiet_NaN; } 1725 static float signaling_NaN() throw() 1726 { return __glibcpp_float_signaling_NaN; } 1727 static float denorm_min() throw() 1728 { return __glibcpp_float_denorm_min; } 1729 1730 static const bool is_iec559 = __glibcpp_float_is_iec559; 1731 static const bool is_bounded = __glibcpp_float_is_bounded; 1732 static const bool is_modulo = __glibcpp_float_is_modulo; 1733 1734 static const bool traps = __glibcpp_float_traps; 1735 static const bool tinyness_before = __glibcpp_float_tinyness_before; 1736 static const float_round_style round_style = __glibcpp_float_round_style; 1737 }; 1738 1739#undef __glibcpp_float_min 1740#undef __glibcpp_float_max 1741#undef __glibcpp_float_digits 1742#undef __glibcpp_float_digits10 1743#undef __glibcpp_float_radix 1744#undef __glibcpp_float_round_error 1745#undef __glibcpp_float_min_exponent 1746#undef __glibcpp_float_min_exponent10 1747#undef __glibcpp_float_max_exponent 1748#undef __glibcpp_float_max_exponent10 1749#undef __glibcpp_float_has_infinity 1750#undef __glibcpp_float_has_quiet_NaN 1751#undef __glibcpp_float_has_signaling_NaN 1752#undef __glibcpp_float_has_denorm 1753#undef __glibcpp_float_has_denorm_loss 1754#undef __glibcpp_float_infinity 1755#undef __glibcpp_float_quiet_NaN 1756#undef __glibcpp_float_signaling_NaN 1757#undef __glibcpp_float_denorm_min 1758#undef __glibcpp_float_is_iec559 1759#undef __glibcpp_float_is_bounded 1760#undef __glibcpp_float_is_modulo 1761#undef __glibcpp_float_traps 1762#undef __glibcpp_float_tinyness_before 1763#undef __glibcpp_float_round_style 1764 1765 template<> 1766 struct numeric_limits<double> 1767 { 1768 static const bool is_specialized = true; 1769 1770 static double min() throw() 1771 { return __glibcpp_double_min; } 1772 static double max() throw() 1773 { return __glibcpp_double_max; } 1774 1775 static const int digits = __glibcpp_double_digits; 1776 static const int digits10 = __glibcpp_double_digits10; 1777 static const bool is_signed = true; 1778 static const bool is_integer = false; 1779 static const bool is_exact = false; 1780 static const int radix = __glibcpp_double_radix; 1781 static double epsilon() throw() 1782 { return __glibcpp_double_epsilon; } 1783 static double round_error() throw() 1784 { return __glibcpp_double_round_error; } 1785 1786 static const int min_exponent = __glibcpp_double_min_exponent; 1787 static const int min_exponent10 = __glibcpp_double_min_exponent10; 1788 static const int max_exponent = __glibcpp_double_max_exponent; 1789 static const int max_exponent10 = __glibcpp_double_max_exponent10; 1790 1791 static const bool has_infinity = __glibcpp_double_has_infinity; 1792 static const bool has_quiet_NaN = __glibcpp_double_has_quiet_NaN; 1793 static const bool has_signaling_NaN = __glibcpp_double_has_signaling_NaN; 1794 static const float_denorm_style has_denorm = 1795 __glibcpp_double_has_denorm; 1796 static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss; 1797 1798 static double infinity() throw() 1799 { return __glibcpp_double_infinity; } 1800 static double quiet_NaN() throw() 1801 { return __glibcpp_double_quiet_NaN; } 1802 static double signaling_NaN() throw() 1803 { return __glibcpp_double_signaling_NaN; } 1804 static double denorm_min() throw() 1805 { return __glibcpp_double_denorm_min; } 1806 1807 static const bool is_iec559 = __glibcpp_double_is_iec559; 1808 static const bool is_bounded = __glibcpp_double_is_bounded; 1809 static const bool is_modulo = __glibcpp_double_is_modulo; 1810 1811 static const bool traps = __glibcpp_double_traps; 1812 static const bool tinyness_before = __glibcpp_double_tinyness_before; 1813 static const float_round_style round_style = 1814 __glibcpp_double_round_style; 1815 }; 1816 1817#undef __glibcpp_double_min 1818#undef __glibcpp_double_max 1819#undef __glibcpp_double_digits 1820#undef __glibcpp_double_digits10 1821#undef __glibcpp_double_radix 1822#undef __glibcpp_double_round_error 1823#undef __glibcpp_double_min_exponent 1824#undef __glibcpp_double_min_exponent10 1825#undef __glibcpp_double_max_exponent 1826#undef __glibcpp_double_max_exponent10 1827#undef __glibcpp_double_has_infinity 1828#undef __glibcpp_double_has_quiet_NaN 1829#undef __glibcpp_double_has_signaling_NaN 1830#undef __glibcpp_double_has_denorm 1831#undef __glibcpp_double_has_denorm_loss 1832#undef __glibcpp_double_infinity 1833#undef __glibcpp_double_quiet_NaN 1834#undef __glibcpp_double_signaling_NaN 1835#undef __glibcpp_double_denorm_min 1836#undef __glibcpp_double_is_iec559 1837#undef __glibcpp_double_is_bounded 1838#undef __glibcpp_double_is_modulo 1839#undef __glibcpp_double_traps 1840#undef __glibcpp_double_tinyness_before 1841#undef __glibcpp_double_round_style 1842 1843 1844 template<> 1845 struct numeric_limits<long double> 1846 { 1847 static const bool is_specialized = true; 1848 1849 static long double min() throw() 1850 { return __glibcpp_long_double_min; } 1851 static long double max() throw() 1852 { return __glibcpp_long_double_max; } 1853 1854 static const int digits = __glibcpp_long_double_digits; 1855 static const int digits10 = __glibcpp_long_double_digits10; 1856 static const bool is_signed = true; 1857 static const bool is_integer = false; 1858 static const bool is_exact = false; 1859 static const int radix = __glibcpp_long_double_radix; 1860 static long double epsilon() throw() 1861 { return __glibcpp_long_double_epsilon; } 1862 static long double round_error() throw() 1863 { return __glibcpp_long_double_round_error; } 1864 1865 static const int min_exponent = __glibcpp_long_double_min_exponent; 1866 static const int min_exponent10 = __glibcpp_long_double_min_exponent10; 1867 static const int max_exponent = __glibcpp_long_double_max_exponent; 1868 static const int max_exponent10 = __glibcpp_long_double_max_exponent10; 1869 1870 static const bool has_infinity = __glibcpp_long_double_has_infinity; 1871 static const bool has_quiet_NaN = __glibcpp_long_double_has_quiet_NaN; 1872 static const bool has_signaling_NaN = 1873 __glibcpp_long_double_has_signaling_NaN; 1874 static const float_denorm_style has_denorm = 1875 __glibcpp_long_double_has_denorm; 1876 static const bool has_denorm_loss = 1877 __glibcpp_long_double_has_denorm_loss; 1878 1879 static long double infinity() throw() 1880 { return __glibcpp_long_double_infinity; } 1881 static long double quiet_NaN() throw() 1882 { return __glibcpp_long_double_quiet_NaN; } 1883 static long double signaling_NaN() throw() 1884 { return __glibcpp_long_double_signaling_NaN; } 1885 static long double denorm_min() throw() 1886 { return __glibcpp_long_double_denorm_min; } 1887 1888 static const bool is_iec559 = __glibcpp_long_double_is_iec559; 1889 static const bool is_bounded = __glibcpp_long_double_is_bounded; 1890 static const bool is_modulo = __glibcpp_long_double_is_modulo; 1891 1892 static const bool traps = __glibcpp_long_double_traps; 1893 static const bool tinyness_before = __glibcpp_long_double_tinyness_before; 1894 static const float_round_style round_style = 1895 __glibcpp_long_double_round_style; 1896 }; 1897 1898#undef __glibcpp_long_double_min 1899#undef __glibcpp_long_double_max 1900#undef __glibcpp_long_double_digits 1901#undef __glibcpp_long_double_digits10 1902#undef __glibcpp_long_double_radix 1903#undef __glibcpp_long_double_round_error 1904#undef __glibcpp_long_double_min_exponent 1905#undef __glibcpp_long_double_min_exponent10 1906#undef __glibcpp_long_double_max_exponent 1907#undef __glibcpp_long_double_max_exponent10 1908#undef __glibcpp_long_double_has_infinity 1909#undef __glibcpp_long_double_has_quiet_NaN 1910#undef __glibcpp_long_double_has_signaling_NaN 1911#undef __glibcpp_long_double_has_denorm 1912#undef __glibcpp_long_double_has_denorm_loss 1913#undef __glibcpp_long_double_infinity 1914#undef __glibcpp_long_double_quiet_NaN 1915#undef __glibcpp_long_double_signaling_NaN 1916#undef __glibcpp_long_double_denorm_min 1917#undef __glibcpp_long_double_is_iec559 1918#undef __glibcpp_long_double_is_bounded 1919#undef __glibcpp_long_double_is_modulo 1920#undef __glibcpp_long_double_traps 1921#undef __glibcpp_long_double_tinyness_before 1922#undef __glibcpp_long_double_round_style 1923 1924} // namespace std 1925 1926#endif // _CPP_NUMERIC_LIMITS 1927