root / lab4 / .minix-src / include / c++ / limits @ 13
History | View | Annotate | Download (39.5 KB)
1 |
// -*- C++ -*- |
---|---|
2 |
//===---------------------------- limits ----------------------------------===// |
3 |
// |
4 |
// The LLVM Compiler Infrastructure |
5 |
// |
6 |
// This file is dual licensed under the MIT and the University of Illinois Open |
7 |
// Source Licenses. See LICENSE.TXT for details. |
8 |
// |
9 |
//===----------------------------------------------------------------------===// |
10 |
|
11 |
#ifndef _LIBCPP_LIMITS |
12 |
#define _LIBCPP_LIMITS |
13 |
|
14 |
/* |
15 |
limits synopsis |
16 |
|
17 |
namespace std |
18 |
{ |
19 |
|
20 |
template<class T> |
21 |
class numeric_limits |
22 |
{ |
23 |
public: |
24 |
static constexpr bool is_specialized = false; |
25 |
static constexpr T min() noexcept; |
26 |
static constexpr T max() noexcept; |
27 |
static constexpr T lowest() noexcept; |
28 |
|
29 |
static constexpr int digits = 0; |
30 |
static constexpr int digits10 = 0; |
31 |
static constexpr int max_digits10 = 0; |
32 |
static constexpr bool is_signed = false; |
33 |
static constexpr bool is_integer = false; |
34 |
static constexpr bool is_exact = false; |
35 |
static constexpr int radix = 0; |
36 |
static constexpr T epsilon() noexcept; |
37 |
static constexpr T round_error() noexcept; |
38 |
|
39 |
static constexpr int min_exponent = 0; |
40 |
static constexpr int min_exponent10 = 0; |
41 |
static constexpr int max_exponent = 0; |
42 |
static constexpr int max_exponent10 = 0; |
43 |
|
44 |
static constexpr bool has_infinity = false; |
45 |
static constexpr bool has_quiet_NaN = false; |
46 |
static constexpr bool has_signaling_NaN = false; |
47 |
static constexpr float_denorm_style has_denorm = denorm_absent; |
48 |
static constexpr bool has_denorm_loss = false; |
49 |
static constexpr T infinity() noexcept; |
50 |
static constexpr T quiet_NaN() noexcept; |
51 |
static constexpr T signaling_NaN() noexcept; |
52 |
static constexpr T denorm_min() noexcept; |
53 |
|
54 |
static constexpr bool is_iec559 = false; |
55 |
static constexpr bool is_bounded = false; |
56 |
static constexpr bool is_modulo = false; |
57 |
|
58 |
static constexpr bool traps = false; |
59 |
static constexpr bool tinyness_before = false; |
60 |
static constexpr float_round_style round_style = round_toward_zero; |
61 |
}; |
62 |
|
63 |
enum float_round_style |
64 |
{ |
65 |
round_indeterminate = -1, |
66 |
round_toward_zero = 0, |
67 |
round_to_nearest = 1, |
68 |
round_toward_infinity = 2, |
69 |
round_toward_neg_infinity = 3 |
70 |
}; |
71 |
|
72 |
enum float_denorm_style |
73 |
{ |
74 |
denorm_indeterminate = -1, |
75 |
denorm_absent = 0, |
76 |
denorm_present = 1 |
77 |
}; |
78 |
|
79 |
template<> class numeric_limits<cv bool>; |
80 |
|
81 |
template<> class numeric_limits<cv char>; |
82 |
template<> class numeric_limits<cv signed char>; |
83 |
template<> class numeric_limits<cv unsigned char>; |
84 |
template<> class numeric_limits<cv wchar_t>; |
85 |
template<> class numeric_limits<cv char16_t>; |
86 |
template<> class numeric_limits<cv char32_t>; |
87 |
|
88 |
template<> class numeric_limits<cv short>; |
89 |
template<> class numeric_limits<cv int>; |
90 |
template<> class numeric_limits<cv long>; |
91 |
template<> class numeric_limits<cv long long>; |
92 |
template<> class numeric_limits<cv unsigned short>; |
93 |
template<> class numeric_limits<cv unsigned int>; |
94 |
template<> class numeric_limits<cv unsigned long>; |
95 |
template<> class numeric_limits<cv unsigned long long>; |
96 |
|
97 |
template<> class numeric_limits<cv float>; |
98 |
template<> class numeric_limits<cv double>; |
99 |
template<> class numeric_limits<cv long double>; |
100 |
|
101 |
} // std |
102 |
|
103 |
*/ |
104 |
|
105 |
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
106 |
#pragma GCC system_header |
107 |
#endif |
108 |
|
109 |
#include <__config> |
110 |
#include <type_traits> |
111 |
|
112 |
#include <__undef_min_max> |
113 |
|
114 |
#if defined(_LIBCPP_MSVCRT) |
115 |
#include "support/win32/limits_win32.h" |
116 |
#endif // _LIBCPP_MSVCRT |
117 |
|
118 |
#if defined(__IBMCPP__) |
119 |
#include "support/ibm/limits.h" |
120 |
#endif // __IBMCPP__ |
121 |
|
122 |
_LIBCPP_BEGIN_NAMESPACE_STD |
123 |
|
124 |
enum float_round_style |
125 |
{ |
126 |
round_indeterminate = -1, |
127 |
round_toward_zero = 0, |
128 |
round_to_nearest = 1, |
129 |
round_toward_infinity = 2, |
130 |
round_toward_neg_infinity = 3 |
131 |
}; |
132 |
|
133 |
enum float_denorm_style |
134 |
{ |
135 |
denorm_indeterminate = -1, |
136 |
denorm_absent = 0, |
137 |
denorm_present = 1 |
138 |
}; |
139 |
|
140 |
template <class _Tp, bool = is_arithmetic<_Tp>::value> |
141 |
class __libcpp_numeric_limits |
142 |
{ |
143 |
protected: |
144 |
typedef _Tp type; |
145 |
|
146 |
static _LIBCPP_CONSTEXPR const bool is_specialized = false; |
147 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();} |
148 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();} |
149 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();} |
150 |
|
151 |
static _LIBCPP_CONSTEXPR const int digits = 0; |
152 |
static _LIBCPP_CONSTEXPR const int digits10 = 0; |
153 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 0; |
154 |
static _LIBCPP_CONSTEXPR const bool is_signed = false; |
155 |
static _LIBCPP_CONSTEXPR const bool is_integer = false; |
156 |
static _LIBCPP_CONSTEXPR const bool is_exact = false; |
157 |
static _LIBCPP_CONSTEXPR const int radix = 0; |
158 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();} |
159 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();} |
160 |
|
161 |
static _LIBCPP_CONSTEXPR const int min_exponent = 0; |
162 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; |
163 |
static _LIBCPP_CONSTEXPR const int max_exponent = 0; |
164 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; |
165 |
|
166 |
static _LIBCPP_CONSTEXPR const bool has_infinity = false; |
167 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; |
168 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; |
169 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; |
170 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
171 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();} |
172 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();} |
173 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();} |
174 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();} |
175 |
|
176 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = false; |
177 |
static _LIBCPP_CONSTEXPR const bool is_bounded = false; |
178 |
static _LIBCPP_CONSTEXPR const bool is_modulo = false; |
179 |
|
180 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
181 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
182 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; |
183 |
}; |
184 |
|
185 |
template <class _Tp, int digits, bool is_signed> |
186 |
struct __libcpp_compute_min |
187 |
{ |
188 |
static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << digits); |
189 |
}; |
190 |
|
191 |
template <class _Tp, int digits> |
192 |
struct __libcpp_compute_min<_Tp, digits, false> |
193 |
{ |
194 |
static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0); |
195 |
}; |
196 |
|
197 |
template <class _Tp> |
198 |
class __libcpp_numeric_limits<_Tp, true> |
199 |
{ |
200 |
protected: |
201 |
typedef _Tp type; |
202 |
|
203 |
static _LIBCPP_CONSTEXPR const bool is_specialized = true; |
204 |
|
205 |
static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0); |
206 |
static _LIBCPP_CONSTEXPR const int digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed); |
207 |
static _LIBCPP_CONSTEXPR const int digits10 = digits * 3 / 10; |
208 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 0; |
209 |
static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value; |
210 |
static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0); |
211 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;} |
212 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;} |
213 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();} |
214 |
|
215 |
static _LIBCPP_CONSTEXPR const bool is_integer = true; |
216 |
static _LIBCPP_CONSTEXPR const bool is_exact = true; |
217 |
static _LIBCPP_CONSTEXPR const int radix = 2; |
218 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);} |
219 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);} |
220 |
|
221 |
static _LIBCPP_CONSTEXPR const int min_exponent = 0; |
222 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; |
223 |
static _LIBCPP_CONSTEXPR const int max_exponent = 0; |
224 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; |
225 |
|
226 |
static _LIBCPP_CONSTEXPR const bool has_infinity = false; |
227 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; |
228 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; |
229 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; |
230 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
231 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);} |
232 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);} |
233 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);} |
234 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);} |
235 |
|
236 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = false; |
237 |
static _LIBCPP_CONSTEXPR const bool is_bounded = true; |
238 |
static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value; |
239 |
|
240 |
#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) |
241 |
static _LIBCPP_CONSTEXPR const bool traps = true; |
242 |
#else |
243 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
244 |
#endif |
245 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
246 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; |
247 |
}; |
248 |
|
249 |
template <> |
250 |
class __libcpp_numeric_limits<bool, true> |
251 |
{ |
252 |
protected: |
253 |
typedef bool type; |
254 |
|
255 |
static _LIBCPP_CONSTEXPR const bool is_specialized = true; |
256 |
|
257 |
static _LIBCPP_CONSTEXPR const bool is_signed = false; |
258 |
static _LIBCPP_CONSTEXPR const int digits = 1; |
259 |
static _LIBCPP_CONSTEXPR const int digits10 = 0; |
260 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 0; |
261 |
static _LIBCPP_CONSTEXPR const type __min = false; |
262 |
static _LIBCPP_CONSTEXPR const type __max = true; |
263 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;} |
264 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;} |
265 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();} |
266 |
|
267 |
static _LIBCPP_CONSTEXPR const bool is_integer = true; |
268 |
static _LIBCPP_CONSTEXPR const bool is_exact = true; |
269 |
static _LIBCPP_CONSTEXPR const int radix = 2; |
270 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);} |
271 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);} |
272 |
|
273 |
static _LIBCPP_CONSTEXPR const int min_exponent = 0; |
274 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; |
275 |
static _LIBCPP_CONSTEXPR const int max_exponent = 0; |
276 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; |
277 |
|
278 |
static _LIBCPP_CONSTEXPR const bool has_infinity = false; |
279 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; |
280 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; |
281 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; |
282 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
283 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);} |
284 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);} |
285 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);} |
286 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);} |
287 |
|
288 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = false; |
289 |
static _LIBCPP_CONSTEXPR const bool is_bounded = true; |
290 |
static _LIBCPP_CONSTEXPR const bool is_modulo = false; |
291 |
|
292 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
293 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
294 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; |
295 |
}; |
296 |
|
297 |
template <> |
298 |
class __libcpp_numeric_limits<float, true> |
299 |
{ |
300 |
protected: |
301 |
typedef float type; |
302 |
|
303 |
static _LIBCPP_CONSTEXPR const bool is_specialized = true; |
304 |
|
305 |
static _LIBCPP_CONSTEXPR const bool is_signed = true; |
306 |
static _LIBCPP_CONSTEXPR const int digits = __FLT_MANT_DIG__; |
307 |
static _LIBCPP_CONSTEXPR const int digits10 = __FLT_DIG__; |
308 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103)/100000; |
309 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;} |
310 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;} |
311 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} |
312 |
|
313 |
static _LIBCPP_CONSTEXPR const bool is_integer = false; |
314 |
static _LIBCPP_CONSTEXPR const bool is_exact = false; |
315 |
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; |
316 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;} |
317 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;} |
318 |
|
319 |
static _LIBCPP_CONSTEXPR const int min_exponent = __FLT_MIN_EXP__; |
320 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __FLT_MIN_10_EXP__; |
321 |
static _LIBCPP_CONSTEXPR const int max_exponent = __FLT_MAX_EXP__; |
322 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __FLT_MAX_10_EXP__; |
323 |
|
324 |
static _LIBCPP_CONSTEXPR const bool has_infinity = true; |
325 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; |
326 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; |
327 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; |
328 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
329 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();} |
330 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");} |
331 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");} |
332 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;} |
333 |
|
334 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = true; |
335 |
static _LIBCPP_CONSTEXPR const bool is_bounded = true; |
336 |
static _LIBCPP_CONSTEXPR const bool is_modulo = false; |
337 |
|
338 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
339 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
340 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; |
341 |
}; |
342 |
|
343 |
template <> |
344 |
class __libcpp_numeric_limits<double, true> |
345 |
{ |
346 |
protected: |
347 |
typedef double type; |
348 |
|
349 |
static _LIBCPP_CONSTEXPR const bool is_specialized = true; |
350 |
|
351 |
static _LIBCPP_CONSTEXPR const bool is_signed = true; |
352 |
static _LIBCPP_CONSTEXPR const int digits = __DBL_MANT_DIG__; |
353 |
static _LIBCPP_CONSTEXPR const int digits10 = __DBL_DIG__; |
354 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103)/100000; |
355 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;} |
356 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;} |
357 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} |
358 |
|
359 |
static _LIBCPP_CONSTEXPR const bool is_integer = false; |
360 |
static _LIBCPP_CONSTEXPR const bool is_exact = false; |
361 |
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; |
362 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;} |
363 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;} |
364 |
|
365 |
static _LIBCPP_CONSTEXPR const int min_exponent = __DBL_MIN_EXP__; |
366 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __DBL_MIN_10_EXP__; |
367 |
static _LIBCPP_CONSTEXPR const int max_exponent = __DBL_MAX_EXP__; |
368 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __DBL_MAX_10_EXP__; |
369 |
|
370 |
static _LIBCPP_CONSTEXPR const bool has_infinity = true; |
371 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; |
372 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; |
373 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; |
374 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
375 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();} |
376 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");} |
377 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");} |
378 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;} |
379 |
|
380 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = true; |
381 |
static _LIBCPP_CONSTEXPR const bool is_bounded = true; |
382 |
static _LIBCPP_CONSTEXPR const bool is_modulo = false; |
383 |
|
384 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
385 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
386 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; |
387 |
}; |
388 |
|
389 |
template <> |
390 |
class __libcpp_numeric_limits<long double, true> |
391 |
{ |
392 |
protected: |
393 |
typedef long double type; |
394 |
|
395 |
static _LIBCPP_CONSTEXPR const bool is_specialized = true; |
396 |
|
397 |
static _LIBCPP_CONSTEXPR const bool is_signed = true; |
398 |
static _LIBCPP_CONSTEXPR const int digits = __LDBL_MANT_DIG__; |
399 |
static _LIBCPP_CONSTEXPR const int digits10 = __LDBL_DIG__; |
400 |
static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103)/100000; |
401 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;} |
402 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;} |
403 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} |
404 |
|
405 |
static _LIBCPP_CONSTEXPR const bool is_integer = false; |
406 |
static _LIBCPP_CONSTEXPR const bool is_exact = false; |
407 |
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; |
408 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;} |
409 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;} |
410 |
|
411 |
static _LIBCPP_CONSTEXPR const int min_exponent = __LDBL_MIN_EXP__; |
412 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __LDBL_MIN_10_EXP__; |
413 |
static _LIBCPP_CONSTEXPR const int max_exponent = __LDBL_MAX_EXP__; |
414 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __LDBL_MAX_10_EXP__; |
415 |
|
416 |
static _LIBCPP_CONSTEXPR const bool has_infinity = true; |
417 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; |
418 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; |
419 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; |
420 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; |
421 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();} |
422 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");} |
423 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");} |
424 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;} |
425 |
|
426 |
#if (defined(__ppc__) || defined(__ppc64__)) |
427 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = false; |
428 |
#else |
429 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = true; |
430 |
#endif |
431 |
static _LIBCPP_CONSTEXPR const bool is_bounded = true; |
432 |
static _LIBCPP_CONSTEXPR const bool is_modulo = false; |
433 |
|
434 |
static _LIBCPP_CONSTEXPR const bool traps = false; |
435 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = false; |
436 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; |
437 |
}; |
438 |
|
439 |
template <class _Tp> |
440 |
class _LIBCPP_TYPE_VIS_ONLY numeric_limits |
441 |
: private __libcpp_numeric_limits<typename remove_cv<_Tp>::type> |
442 |
{ |
443 |
typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base; |
444 |
typedef typename __base::type type; |
445 |
public: |
446 |
static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; |
447 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} |
448 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} |
449 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} |
450 |
|
451 |
static _LIBCPP_CONSTEXPR const int digits = __base::digits; |
452 |
static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; |
453 |
static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; |
454 |
static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; |
455 |
static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; |
456 |
static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; |
457 |
static _LIBCPP_CONSTEXPR const int radix = __base::radix; |
458 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} |
459 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} |
460 |
|
461 |
static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; |
462 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; |
463 |
static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; |
464 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; |
465 |
|
466 |
static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; |
467 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; |
468 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; |
469 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; |
470 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; |
471 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} |
472 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} |
473 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} |
474 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} |
475 |
|
476 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; |
477 |
static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; |
478 |
static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; |
479 |
|
480 |
static _LIBCPP_CONSTEXPR const bool traps = __base::traps; |
481 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; |
482 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; |
483 |
}; |
484 |
|
485 |
template <class _Tp> |
486 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized; |
487 |
template <class _Tp> |
488 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits; |
489 |
template <class _Tp> |
490 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10; |
491 |
template <class _Tp> |
492 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10; |
493 |
template <class _Tp> |
494 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed; |
495 |
template <class _Tp> |
496 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer; |
497 |
template <class _Tp> |
498 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact; |
499 |
template <class _Tp> |
500 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix; |
501 |
template <class _Tp> |
502 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent; |
503 |
template <class _Tp> |
504 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10; |
505 |
template <class _Tp> |
506 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent; |
507 |
template <class _Tp> |
508 |
_LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10; |
509 |
template <class _Tp> |
510 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity; |
511 |
template <class _Tp> |
512 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN; |
513 |
template <class _Tp> |
514 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN; |
515 |
template <class _Tp> |
516 |
_LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm; |
517 |
template <class _Tp> |
518 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss; |
519 |
template <class _Tp> |
520 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559; |
521 |
template <class _Tp> |
522 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded; |
523 |
template <class _Tp> |
524 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo; |
525 |
template <class _Tp> |
526 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps; |
527 |
template <class _Tp> |
528 |
_LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before; |
529 |
template <class _Tp> |
530 |
_LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style; |
531 |
|
532 |
template <class _Tp> |
533 |
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<const _Tp> |
534 |
: private numeric_limits<_Tp> |
535 |
{ |
536 |
typedef numeric_limits<_Tp> __base; |
537 |
typedef _Tp type; |
538 |
public: |
539 |
static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; |
540 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} |
541 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} |
542 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} |
543 |
|
544 |
static _LIBCPP_CONSTEXPR const int digits = __base::digits; |
545 |
static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; |
546 |
static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; |
547 |
static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; |
548 |
static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; |
549 |
static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; |
550 |
static _LIBCPP_CONSTEXPR const int radix = __base::radix; |
551 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} |
552 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} |
553 |
|
554 |
static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; |
555 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; |
556 |
static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; |
557 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; |
558 |
|
559 |
static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; |
560 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; |
561 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; |
562 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; |
563 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; |
564 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} |
565 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} |
566 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} |
567 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} |
568 |
|
569 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; |
570 |
static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; |
571 |
static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; |
572 |
|
573 |
static _LIBCPP_CONSTEXPR const bool traps = __base::traps; |
574 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; |
575 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; |
576 |
}; |
577 |
|
578 |
template <class _Tp> |
579 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized; |
580 |
template <class _Tp> |
581 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits; |
582 |
template <class _Tp> |
583 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10; |
584 |
template <class _Tp> |
585 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10; |
586 |
template <class _Tp> |
587 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed; |
588 |
template <class _Tp> |
589 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer; |
590 |
template <class _Tp> |
591 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact; |
592 |
template <class _Tp> |
593 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix; |
594 |
template <class _Tp> |
595 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent; |
596 |
template <class _Tp> |
597 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10; |
598 |
template <class _Tp> |
599 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent; |
600 |
template <class _Tp> |
601 |
_LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10; |
602 |
template <class _Tp> |
603 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity; |
604 |
template <class _Tp> |
605 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN; |
606 |
template <class _Tp> |
607 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN; |
608 |
template <class _Tp> |
609 |
_LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm; |
610 |
template <class _Tp> |
611 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss; |
612 |
template <class _Tp> |
613 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559; |
614 |
template <class _Tp> |
615 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded; |
616 |
template <class _Tp> |
617 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo; |
618 |
template <class _Tp> |
619 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps; |
620 |
template <class _Tp> |
621 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before; |
622 |
template <class _Tp> |
623 |
_LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style; |
624 |
|
625 |
template <class _Tp> |
626 |
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<volatile _Tp> |
627 |
: private numeric_limits<_Tp> |
628 |
{ |
629 |
typedef numeric_limits<_Tp> __base; |
630 |
typedef _Tp type; |
631 |
public: |
632 |
static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; |
633 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} |
634 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} |
635 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} |
636 |
|
637 |
static _LIBCPP_CONSTEXPR const int digits = __base::digits; |
638 |
static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; |
639 |
static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; |
640 |
static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; |
641 |
static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; |
642 |
static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; |
643 |
static _LIBCPP_CONSTEXPR const int radix = __base::radix; |
644 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} |
645 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} |
646 |
|
647 |
static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; |
648 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; |
649 |
static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; |
650 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; |
651 |
|
652 |
static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; |
653 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; |
654 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; |
655 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; |
656 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; |
657 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} |
658 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} |
659 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} |
660 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} |
661 |
|
662 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; |
663 |
static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; |
664 |
static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; |
665 |
|
666 |
static _LIBCPP_CONSTEXPR const bool traps = __base::traps; |
667 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; |
668 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; |
669 |
}; |
670 |
|
671 |
template <class _Tp> |
672 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized; |
673 |
template <class _Tp> |
674 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits; |
675 |
template <class _Tp> |
676 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10; |
677 |
template <class _Tp> |
678 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10; |
679 |
template <class _Tp> |
680 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed; |
681 |
template <class _Tp> |
682 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer; |
683 |
template <class _Tp> |
684 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact; |
685 |
template <class _Tp> |
686 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix; |
687 |
template <class _Tp> |
688 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent; |
689 |
template <class _Tp> |
690 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10; |
691 |
template <class _Tp> |
692 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent; |
693 |
template <class _Tp> |
694 |
_LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10; |
695 |
template <class _Tp> |
696 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity; |
697 |
template <class _Tp> |
698 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN; |
699 |
template <class _Tp> |
700 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN; |
701 |
template <class _Tp> |
702 |
_LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm; |
703 |
template <class _Tp> |
704 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss; |
705 |
template <class _Tp> |
706 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559; |
707 |
template <class _Tp> |
708 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded; |
709 |
template <class _Tp> |
710 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo; |
711 |
template <class _Tp> |
712 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps; |
713 |
template <class _Tp> |
714 |
_LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before; |
715 |
template <class _Tp> |
716 |
_LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style; |
717 |
|
718 |
template <class _Tp> |
719 |
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<const volatile _Tp> |
720 |
: private numeric_limits<_Tp> |
721 |
{ |
722 |
typedef numeric_limits<_Tp> __base; |
723 |
typedef _Tp type; |
724 |
public: |
725 |
static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; |
726 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} |
727 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} |
728 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} |
729 |
|
730 |
static _LIBCPP_CONSTEXPR const int digits = __base::digits; |
731 |
static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; |
732 |
static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; |
733 |
static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; |
734 |
static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; |
735 |
static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; |
736 |
static _LIBCPP_CONSTEXPR const int radix = __base::radix; |
737 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} |
738 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} |
739 |
|
740 |
static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; |
741 |
static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; |
742 |
static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; |
743 |
static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; |
744 |
|
745 |
static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; |
746 |
static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; |
747 |
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; |
748 |
static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; |
749 |
static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; |
750 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} |
751 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} |
752 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} |
753 |
_LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} |
754 |
|
755 |
static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; |
756 |
static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; |
757 |
static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; |
758 |
|
759 |
static _LIBCPP_CONSTEXPR const bool traps = __base::traps; |
760 |
static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; |
761 |
static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; |
762 |
}; |
763 |
|
764 |
template <class _Tp> |
765 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized; |
766 |
template <class _Tp> |
767 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits; |
768 |
template <class _Tp> |
769 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10; |
770 |
template <class _Tp> |
771 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10; |
772 |
template <class _Tp> |
773 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed; |
774 |
template <class _Tp> |
775 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer; |
776 |
template <class _Tp> |
777 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact; |
778 |
template <class _Tp> |
779 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix; |
780 |
template <class _Tp> |
781 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent; |
782 |
template <class _Tp> |
783 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10; |
784 |
template <class _Tp> |
785 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent; |
786 |
template <class _Tp> |
787 |
_LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10; |
788 |
template <class _Tp> |
789 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity; |
790 |
template <class _Tp> |
791 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN; |
792 |
template <class _Tp> |
793 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN; |
794 |
template <class _Tp> |
795 |
_LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm; |
796 |
template <class _Tp> |
797 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss; |
798 |
template <class _Tp> |
799 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559; |
800 |
template <class _Tp> |
801 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded; |
802 |
template <class _Tp> |
803 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo; |
804 |
template <class _Tp> |
805 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps; |
806 |
template <class _Tp> |
807 |
_LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before; |
808 |
template <class _Tp> |
809 |
_LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style; |
810 |
|
811 |
_LIBCPP_END_NAMESPACE_STD |
812 |
|
813 |
#endif // _LIBCPP_LIMITS |