root / lab4 / .minix-src / include / c++ / limits @ 14
History | View | Annotate | Download (39.5 KB)
1 | 13 | up20180614 | // -*- 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 |