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 <[email protected]> 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 887 namespace 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