FastLED 3.9.15
Loading...
Searching...
No Matches
limits.h
Go to the documentation of this file.
1#pragma once
2#include "fl/stl/noexcept.h"
3
4/*
5Provides numeric_limits for fundamental types, similar to <limits> from the C++ standard library.
6This avoids including <limits> which can slow down compilation.
7Follows the same pattern as fl/type_traits.h to provide essential type information.
8*/
9
10namespace fl {
11
12// Helper template to compute integer limits based on size and signedness
13namespace detail {
14 // Compute number of value bits (excludes sign bit for signed types)
15 // C++11 compatible: use constexpr function instead of variable template
16 template<typename T>
18 return (sizeof(T) * 8) - (T(-1) < T(0) ? 1 : 0);
19 }
20
21 template<typename T>
23 static constexpr int value = (sizeof(T) * 8) - (T(-1) < T(0) ? 1 : 0);
24 };
25
26 // Compute digits10: floor(log10(2^digits))
27 // For 8 bits: 2, 16 bits: 4, 32 bits: 9, 64 bits: 19
28 // C++11 compatible: use constexpr function instead of variable template
29 template<typename T>
31 return sizeof(T) == 1 ? 2 :
32 sizeof(T) == 2 ? 4 :
33 sizeof(T) == 4 ? 9 :
34 sizeof(T) == 8 ? 19 : 0;
35 }
36
37 template<typename T>
39 static constexpr int value =
40 sizeof(T) == 1 ? 2 :
41 sizeof(T) == 2 ? 4 :
42 sizeof(T) == 4 ? 9 :
43 sizeof(T) == 8 ? 19 : 0;
44 };
45
46 // Compute minimum value based on signedness
47 template<typename T, bool IsSigned = (T(-1) < T(0))>
49
50 template<typename T>
51 struct integer_min_helper<T, true> { // Signed
52 static constexpr T value() FL_NOEXCEPT {
53 // For signed: -(2^(bits-1))
54 // Use the pattern: -MAX - 1 to avoid overflow
55 return sizeof(T) == 1 ? T(-128) :
56 sizeof(T) == 2 ? T(-32768) :
57 sizeof(T) == 4 ? T(-2147483647 - 1) :
58 sizeof(T) == 8 ? T(-9223372036854775807LL - 1) : T(0);
59 }
60 };
61
62 template<typename T>
63 struct integer_min_helper<T, false> { // Unsigned
64 static constexpr T value() FL_NOEXCEPT { return T(0); }
65 };
66
67 // Compute maximum value based on signedness and size
68 template<typename T, bool IsSigned = (T(-1) < T(0))>
70
71 template<typename T>
72 struct integer_max_helper<T, true> { // Signed
73 static constexpr T value() FL_NOEXCEPT {
74 // For signed: 2^(bits-1) - 1
75 return sizeof(T) == 1 ? T(127) :
76 sizeof(T) == 2 ? T(32767) :
77 sizeof(T) == 4 ? T(2147483647) :
78 sizeof(T) == 8 ? T(9223372036854775807LL) : T(0);
79 }
80 };
81
82 template<typename T>
83 struct integer_max_helper<T, false> { // Unsigned
84 static constexpr T value() FL_NOEXCEPT {
85 // For unsigned: 2^bits - 1
86 return sizeof(T) == 1 ? T(255) :
87 sizeof(T) == 2 ? T(65535) :
88 sizeof(T) == 4 ? T(4294967295U) :
89 sizeof(T) == 8 ? T(18446744073709551615ULL) : T(0);
90 }
91 };
92}
93
94// Primary template - default numeric_limits for unknown types
95template <typename T>
97 enum : bool { is_specialized = false };
98 enum : bool { is_signed = false };
99 enum : bool { is_integer = false };
100 enum : bool { is_exact = false };
101 enum : bool { has_infinity = false };
102 enum : bool { has_quiet_NaN = false };
103 enum : bool { has_signaling_NaN = false };
104 enum : int { digits = 0 };
105 enum : int { digits10 = 0 };
106
107 static constexpr T (min)() FL_NOEXCEPT { return T(); }
108 static constexpr T (max)() FL_NOEXCEPT { return T(); }
109 static constexpr T (lowest)() FL_NOEXCEPT { return T(); }
110 static constexpr T epsilon() FL_NOEXCEPT { return T(); }
111 static constexpr T round_error() FL_NOEXCEPT { return T(); }
112 static constexpr T infinity() FL_NOEXCEPT { return T(); }
113 static constexpr T quiet_NaN() FL_NOEXCEPT { return T(); }
114 static constexpr T signaling_NaN() FL_NOEXCEPT { return T(); }
115 static constexpr T denorm_min() FL_NOEXCEPT { return T(); }
116};
117
118// Specialization for bool
119template <>
121 enum : bool { is_specialized = true };
122 enum : bool { is_signed = false };
123 enum : bool { is_integer = true };
124 enum : bool { is_exact = true };
125 enum : bool { has_infinity = false };
126 enum : bool { has_quiet_NaN = false };
127 enum : bool { has_signaling_NaN = false };
128 enum : int { digits = 1 };
129 enum : int { digits10 = 0 };
130
131 static constexpr bool (min)() FL_NOEXCEPT { return false; }
132 static constexpr bool (max)() FL_NOEXCEPT { return true; }
133 static constexpr bool (lowest)() FL_NOEXCEPT { return false; }
134 static constexpr bool epsilon() FL_NOEXCEPT { return false; }
135 static constexpr bool round_error() FL_NOEXCEPT { return false; }
136};
137
138// Specialization for char
139template <>
141 enum : bool { is_specialized = true };
142 static constexpr bool is_signed = (char(-1) < char(0));
143 enum : bool { is_integer = true };
144 enum : bool { is_exact = true };
145 enum : bool { has_infinity = false };
146 enum : bool { has_quiet_NaN = false };
147 enum : bool { has_signaling_NaN = false };
150
151 static constexpr char (min)() FL_NOEXCEPT { return detail::integer_min_helper<char>::value(); }
152 static constexpr char (max)() FL_NOEXCEPT { return detail::integer_max_helper<char>::value(); }
153 static constexpr char (lowest)() FL_NOEXCEPT { return (min)(); }
154 static constexpr char epsilon() FL_NOEXCEPT { return 0; }
155 static constexpr char round_error() FL_NOEXCEPT { return 0; }
156};
157
158// Specialization for signed char (i8)
159template <>
161 enum : bool { is_specialized = true };
162 enum : bool { is_signed = true };
163 enum : bool { is_integer = true };
164 enum : bool { is_exact = true };
165 enum : bool { has_infinity = false };
166 enum : bool { has_quiet_NaN = false };
167 enum : bool { has_signaling_NaN = false };
170
171 static constexpr signed char (min)() FL_NOEXCEPT { return detail::integer_min_helper<signed char>::value(); }
172 static constexpr signed char (max)() FL_NOEXCEPT { return detail::integer_max_helper<signed char>::value(); }
173 static constexpr signed char (lowest)() FL_NOEXCEPT { return (min)(); }
174 static constexpr signed char epsilon() FL_NOEXCEPT { return 0; }
175 static constexpr signed char round_error() FL_NOEXCEPT { return 0; }
176};
177
178// Specialization for unsigned char (u8)
179template <>
181 enum : bool { is_specialized = true };
182 enum : bool { is_signed = false };
183 enum : bool { is_integer = true };
184 enum : bool { is_exact = true };
185 enum : bool { has_infinity = false };
186 enum : bool { has_quiet_NaN = false };
187 enum : bool { has_signaling_NaN = false };
190
191 static constexpr unsigned char (min)() FL_NOEXCEPT { return detail::integer_min_helper<unsigned char>::value(); }
192 static constexpr unsigned char (max)() FL_NOEXCEPT { return detail::integer_max_helper<unsigned char>::value(); }
193 static constexpr unsigned char (lowest)() FL_NOEXCEPT { return 0; }
194 static constexpr unsigned char epsilon() FL_NOEXCEPT { return 0; }
195 static constexpr unsigned char round_error() FL_NOEXCEPT { return 0; }
196};
197
198} // namespace fl
199
200// Protect against min/max macros from Arduino and other platforms
201// Undefine them again in case they were redefined by earlier includes
202#ifdef min
203#undef min
204#endif
205#ifdef max
206#undef max
207#endif
208
209namespace fl {
210
211// Specialization for short (i16)
212template <>
214 enum : bool { is_specialized = true };
215 enum : bool { is_signed = true };
216 enum : bool { is_integer = true };
217 enum : bool { is_exact = true };
218 enum : bool { has_infinity = false };
219 enum : bool { has_quiet_NaN = false };
220 enum : bool { has_signaling_NaN = false };
223
224 static constexpr short min() FL_NOEXCEPT { return detail::integer_min_helper<short>::value(); }
225 static constexpr short max() FL_NOEXCEPT { return detail::integer_max_helper<short>::value(); }
226 static constexpr short lowest() FL_NOEXCEPT { return min(); }
227 static constexpr short epsilon() FL_NOEXCEPT { return 0; }
228 static constexpr short round_error() FL_NOEXCEPT { return 0; }
229};
230
231// Specialization for unsigned short (u16)
232template <>
234 enum : bool { is_specialized = true };
235 enum : bool { is_signed = false };
236 enum : bool { is_integer = true };
237 enum : bool { is_exact = true };
238 enum : bool { has_infinity = false };
239 enum : bool { has_quiet_NaN = false };
240 enum : bool { has_signaling_NaN = false };
243
244 static constexpr unsigned short min() FL_NOEXCEPT { return detail::integer_min_helper<unsigned short>::value(); }
245 static constexpr unsigned short max() FL_NOEXCEPT { return detail::integer_max_helper<unsigned short>::value(); }
246 static constexpr unsigned short lowest() FL_NOEXCEPT { return 0; }
247 static constexpr unsigned short epsilon() FL_NOEXCEPT { return 0; }
248 static constexpr unsigned short round_error() FL_NOEXCEPT { return 0; }
249};
250
251// Specialization for int
252template <>
254 enum : bool { is_specialized = true };
255 enum : bool { is_signed = true };
256 enum : bool { is_integer = true };
257 enum : bool { is_exact = true };
258 enum : bool { has_infinity = false };
259 enum : bool { has_quiet_NaN = false };
260 enum : bool { has_signaling_NaN = false };
261 // int can be 16-bit (AVR) or 32-bit (most platforms) depending on platform
264
265 static constexpr int min() FL_NOEXCEPT {
267 }
268 static constexpr int max() FL_NOEXCEPT {
270 }
271 static constexpr int lowest() FL_NOEXCEPT { return min(); }
272 static constexpr int epsilon() FL_NOEXCEPT { return 0; }
273 static constexpr int round_error() FL_NOEXCEPT { return 0; }
274};
275
276// Specialization for unsigned int
277template <>
279 enum : bool { is_specialized = true };
280 enum : bool { is_signed = false };
281 enum : bool { is_integer = true };
282 enum : bool { is_exact = true };
283 enum : bool { has_infinity = false };
284 enum : bool { has_quiet_NaN = false };
285 enum : bool { has_signaling_NaN = false };
286 // unsigned int can be 16-bit (AVR) or 32-bit (most platforms) depending on platform
289
290 static constexpr unsigned int min() FL_NOEXCEPT {
292 }
293 static constexpr unsigned int max() FL_NOEXCEPT {
295 }
296 static constexpr unsigned int lowest() FL_NOEXCEPT { return 0; }
297 static constexpr unsigned int epsilon() FL_NOEXCEPT { return 0; }
298 static constexpr unsigned int round_error() FL_NOEXCEPT { return 0; }
299};
300
301// Specialization for long
302template <>
304 enum : bool { is_specialized = true };
305 enum : bool { is_signed = true };
306 enum : bool { is_integer = true };
307 enum : bool { is_exact = true };
308 enum : bool { has_infinity = false };
309 enum : bool { has_quiet_NaN = false };
310 enum : bool { has_signaling_NaN = false };
311 // long can be 32-bit or 64-bit depending on platform
314
315 static constexpr long min() FL_NOEXCEPT {
317 }
318 static constexpr long max() FL_NOEXCEPT {
320 }
321 static constexpr long lowest() FL_NOEXCEPT { return min(); }
322 static constexpr long epsilon() FL_NOEXCEPT { return 0; }
323 static constexpr long round_error() FL_NOEXCEPT { return 0; }
324};
325
326// Specialization for unsigned long
327template <>
329 enum : bool { is_specialized = true };
330 enum : bool { is_signed = false };
331 enum : bool { is_integer = true };
332 enum : bool { is_exact = true };
333 enum : bool { has_infinity = false };
334 enum : bool { has_quiet_NaN = false };
335 enum : bool { has_signaling_NaN = false };
336 // unsigned long can be 32-bit or 64-bit depending on platform
339
340 static constexpr unsigned long min() FL_NOEXCEPT {
342 }
343 static constexpr unsigned long max() FL_NOEXCEPT {
345 }
346 static constexpr unsigned long lowest() FL_NOEXCEPT { return 0; }
347 static constexpr unsigned long epsilon() FL_NOEXCEPT { return 0; }
348 static constexpr unsigned long round_error() FL_NOEXCEPT { return 0; }
349};
350
351// Specialization for long long (i64)
352template <>
354 enum : bool { is_specialized = true };
355 enum : bool { is_signed = true };
356 enum : bool { is_integer = true };
357 enum : bool { is_exact = true };
358 enum : bool { has_infinity = false };
359 enum : bool { has_quiet_NaN = false };
360 enum : bool { has_signaling_NaN = false };
363
364 static constexpr long long min() FL_NOEXCEPT { return detail::integer_min_helper<long long>::value(); }
365 static constexpr long long max() FL_NOEXCEPT { return detail::integer_max_helper<long long>::value(); }
366 static constexpr long long lowest() FL_NOEXCEPT { return min(); }
367 static constexpr long long epsilon() FL_NOEXCEPT { return 0; }
368 static constexpr long long round_error() FL_NOEXCEPT { return 0; }
369};
370
371// Specialization for unsigned long long (u64)
372template <>
374 enum : bool { is_specialized = true };
375 enum : bool { is_signed = false };
376 enum : bool { is_integer = true };
377 enum : bool { is_exact = true };
378 enum : bool { has_infinity = false };
379 enum : bool { has_quiet_NaN = false };
380 enum : bool { has_signaling_NaN = false };
383
384 static constexpr unsigned long long min() FL_NOEXCEPT { return detail::integer_min_helper<unsigned long long>::value(); }
385 static constexpr unsigned long long max() FL_NOEXCEPT { return detail::integer_max_helper<unsigned long long>::value(); }
386 static constexpr unsigned long long lowest() FL_NOEXCEPT { return 0; }
387 static constexpr unsigned long long epsilon() FL_NOEXCEPT { return 0; }
388 static constexpr unsigned long long round_error() FL_NOEXCEPT { return 0; }
389};
390
391// Specialization for float
392template <>
394 enum : bool { is_specialized = true };
395 enum : bool { is_signed = true };
396 enum : bool { is_integer = false };
397 enum : bool { is_exact = false };
398 enum : bool { has_infinity = true };
399 enum : bool { has_quiet_NaN = true };
400 enum : bool { has_signaling_NaN = true };
401 enum : int { digits = 24 }; // __FLT_MANT_DIG__ is typically 24
402 enum : int { digits10 = 6 }; // __FLT_DIG__ is typically 6
403 static constexpr int max_digits10 = 9; // Maximum digits for round-trip
404 static constexpr int max_exponent = 128; // __FLT_MAX_EXP__ is typically 128
405 static constexpr int max_exponent10 = 38; // __FLT_MAX_10_EXP__ is typically 38
406 static constexpr int min_exponent = -125; // __FLT_MIN_EXP__ is typically -125
407 static constexpr int min_exponent10 = -37; // __FLT_MIN_10_EXP__ is typically -37
408
409 // Use compiler built-in constants (GCC/Clang) instead of hardcoded literals
410 static constexpr float min() FL_NOEXCEPT { return __FLT_MIN__; }
411 static constexpr float max() FL_NOEXCEPT { return __FLT_MAX__; }
412 static constexpr float lowest() FL_NOEXCEPT { return -__FLT_MAX__; }
413 static constexpr float epsilon() FL_NOEXCEPT { return __FLT_EPSILON__; }
414 static constexpr float round_error() FL_NOEXCEPT { return 0.5F; }
415
416 static constexpr float infinity() FL_NOEXCEPT {
417 return __builtin_huge_valf();
418 }
419 static constexpr float quiet_NaN() FL_NOEXCEPT {
420 return __builtin_nanf("");
421 }
422 static constexpr float signaling_NaN() FL_NOEXCEPT {
423 return __builtin_nansf("");
424 }
425 // Use compiler built-in for denormalized minimum (platform-specific)
426 static constexpr float denorm_min() FL_NOEXCEPT {
427 return __FLT_DENORM_MIN__;
428 }
429};
430
431// Specialization for double
432template <>
434 enum : bool { is_specialized = true };
435 enum : bool { is_signed = true };
436 enum : bool { is_integer = false };
437 enum : bool { is_exact = false };
438 enum : bool { has_infinity = true };
439 enum : bool { has_quiet_NaN = true };
440 enum : bool { has_signaling_NaN = true };
441 enum : int { digits = 53 }; // __DBL_MANT_DIG__ is typically 53
442 enum : int { digits10 = 15 }; // __DBL_DIG__ is typically 15
443 static constexpr int max_digits10 = 17; // Maximum digits for round-trip
444 static constexpr int max_exponent = 1024; // __DBL_MAX_EXP__ is typically 1024
445 static constexpr int max_exponent10 = 308; // __DBL_MAX_10_EXP__ is typically 308
446 static constexpr int min_exponent = -1021; // __DBL_MIN_EXP__ is typically -1021
447 static constexpr int min_exponent10 = -307; // __DBL_MIN_10_EXP__ is typically -307
448
449 // Use compiler built-in constants (GCC/Clang) instead of hardcoded literals
450 // This avoids overflow warnings on platforms with strict compile-time float handling
451 static constexpr double min() FL_NOEXCEPT { return __DBL_MIN__; }
452 static constexpr double max() FL_NOEXCEPT { return __DBL_MAX__; }
453 static constexpr double lowest() FL_NOEXCEPT { return -__DBL_MAX__; }
454 static constexpr double epsilon() FL_NOEXCEPT { return __DBL_EPSILON__; }
455 static constexpr double round_error() FL_NOEXCEPT { return 0.5; }
456
457 static constexpr double infinity() FL_NOEXCEPT {
458 return __builtin_huge_val();
459 }
460 static constexpr double quiet_NaN() FL_NOEXCEPT {
461 return __builtin_nan("");
462 }
463 static constexpr double signaling_NaN() FL_NOEXCEPT {
464 return __builtin_nans("");
465 }
466 // Use compiler built-in for denormalized minimum (platform-specific)
467 static constexpr double denorm_min() FL_NOEXCEPT {
468 return __DBL_DENORM_MIN__;
469 }
470};
471
472// long double specialization removed
473
474} // namespace fl
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NOEXCEPT
Memory functions are available in fl:: namespace via fl/stl/cstring.h Using declarations cannot work ...
Definition math.h:71
constexpr int integer_digits10_func() FL_NOEXCEPT
Definition limits.h:30
constexpr int integer_digits_func() FL_NOEXCEPT
Definition limits.h:17
Compile-time linker keep-alive hook for a single fl::Bus.
Definition bus_traits.h:48
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT
static constexpr int value
Definition limits.h:39
static constexpr int value
Definition limits.h:23
static constexpr T value() FL_NOEXCEPT
Definition limits.h:84
static constexpr T value() FL_NOEXCEPT
Definition limits.h:73
static constexpr T value() FL_NOEXCEPT
Definition limits.h:64
static constexpr T value() FL_NOEXCEPT
Definition limits.h:52
static constexpr bool max() FL_NOEXCEPT
Definition limits.h:132
static constexpr bool round_error() FL_NOEXCEPT
Definition limits.h:135
static constexpr bool epsilon() FL_NOEXCEPT
Definition limits.h:134
static constexpr bool lowest() FL_NOEXCEPT
Definition limits.h:133
static constexpr bool min() FL_NOEXCEPT
Definition limits.h:131
static constexpr char min() FL_NOEXCEPT
Definition limits.h:151
static constexpr char epsilon() FL_NOEXCEPT
Definition limits.h:154
static constexpr char lowest() FL_NOEXCEPT
Definition limits.h:153
static constexpr char max() FL_NOEXCEPT
Definition limits.h:152
static constexpr char round_error() FL_NOEXCEPT
Definition limits.h:155
static constexpr bool is_signed
Definition limits.h:142
static constexpr int digits
Definition limits.h:148
static constexpr int digits10
Definition limits.h:149
static constexpr double epsilon() FL_NOEXCEPT
Definition limits.h:454
static constexpr double max() FL_NOEXCEPT
Definition limits.h:452
static constexpr int max_exponent10
Definition limits.h:445
static constexpr double quiet_NaN() FL_NOEXCEPT
Definition limits.h:460
static constexpr int min_exponent
Definition limits.h:446
static constexpr double round_error() FL_NOEXCEPT
Definition limits.h:455
static constexpr int min_exponent10
Definition limits.h:447
static constexpr int max_exponent
Definition limits.h:444
static constexpr double signaling_NaN() FL_NOEXCEPT
Definition limits.h:463
static constexpr double min() FL_NOEXCEPT
Definition limits.h:451
static constexpr double infinity() FL_NOEXCEPT
Definition limits.h:457
static constexpr int max_digits10
Definition limits.h:443
static constexpr double denorm_min() FL_NOEXCEPT
Definition limits.h:467
static constexpr double lowest() FL_NOEXCEPT
Definition limits.h:453
static constexpr float quiet_NaN() FL_NOEXCEPT
Definition limits.h:419
static constexpr int min_exponent
Definition limits.h:406
static constexpr float max() FL_NOEXCEPT
Definition limits.h:411
static constexpr float round_error() FL_NOEXCEPT
Definition limits.h:414
static constexpr int max_exponent10
Definition limits.h:405
static constexpr float lowest() FL_NOEXCEPT
Definition limits.h:412
static constexpr float infinity() FL_NOEXCEPT
Definition limits.h:416
static constexpr int max_digits10
Definition limits.h:403
static constexpr float epsilon() FL_NOEXCEPT
Definition limits.h:413
static constexpr int min_exponent10
Definition limits.h:407
static constexpr float signaling_NaN() FL_NOEXCEPT
Definition limits.h:422
static constexpr float denorm_min() FL_NOEXCEPT
Definition limits.h:426
static constexpr int max_exponent
Definition limits.h:404
static constexpr float min() FL_NOEXCEPT
Definition limits.h:410
static constexpr int max() FL_NOEXCEPT
Definition limits.h:268
static constexpr int lowest() FL_NOEXCEPT
Definition limits.h:271
static constexpr int digits10
Definition limits.h:263
static constexpr int round_error() FL_NOEXCEPT
Definition limits.h:273
static constexpr int min() FL_NOEXCEPT
Definition limits.h:265
static constexpr int digits
Definition limits.h:262
static constexpr int epsilon() FL_NOEXCEPT
Definition limits.h:272
static constexpr int digits10
Definition limits.h:313
static constexpr long epsilon() FL_NOEXCEPT
Definition limits.h:322
static constexpr long max() FL_NOEXCEPT
Definition limits.h:318
static constexpr long round_error() FL_NOEXCEPT
Definition limits.h:323
static constexpr long min() FL_NOEXCEPT
Definition limits.h:315
static constexpr long lowest() FL_NOEXCEPT
Definition limits.h:321
static constexpr int digits
Definition limits.h:312
static constexpr long long lowest() FL_NOEXCEPT
Definition limits.h:366
static constexpr long long max() FL_NOEXCEPT
Definition limits.h:365
static constexpr long long epsilon() FL_NOEXCEPT
Definition limits.h:367
static constexpr long long round_error() FL_NOEXCEPT
Definition limits.h:368
static constexpr int digits10
Definition limits.h:362
static constexpr long long min() FL_NOEXCEPT
Definition limits.h:364
static constexpr int digits
Definition limits.h:361
static constexpr short max() FL_NOEXCEPT
Definition limits.h:225
static constexpr short min() FL_NOEXCEPT
Definition limits.h:224
static constexpr int digits10
Definition limits.h:222
static constexpr short round_error() FL_NOEXCEPT
Definition limits.h:228
static constexpr short lowest() FL_NOEXCEPT
Definition limits.h:226
static constexpr short epsilon() FL_NOEXCEPT
Definition limits.h:227
static constexpr int digits
Definition limits.h:221
static constexpr signed char lowest() FL_NOEXCEPT
Definition limits.h:173
static constexpr signed char epsilon() FL_NOEXCEPT
Definition limits.h:174
static constexpr int digits10
Definition limits.h:169
static constexpr signed char min() FL_NOEXCEPT
Definition limits.h:171
static constexpr signed char max() FL_NOEXCEPT
Definition limits.h:172
static constexpr signed char round_error() FL_NOEXCEPT
Definition limits.h:175
static constexpr int digits
Definition limits.h:168
static constexpr unsigned char max() FL_NOEXCEPT
Definition limits.h:192
static constexpr unsigned char epsilon() FL_NOEXCEPT
Definition limits.h:194
static constexpr int digits10
Definition limits.h:189
static constexpr int digits
Definition limits.h:188
static constexpr unsigned char min() FL_NOEXCEPT
Definition limits.h:191
static constexpr unsigned char round_error() FL_NOEXCEPT
Definition limits.h:195
static constexpr unsigned char lowest() FL_NOEXCEPT
Definition limits.h:193
static constexpr unsigned int max() FL_NOEXCEPT
Definition limits.h:293
static constexpr unsigned int round_error() FL_NOEXCEPT
Definition limits.h:298
static constexpr unsigned int lowest() FL_NOEXCEPT
Definition limits.h:296
static constexpr unsigned int min() FL_NOEXCEPT
Definition limits.h:290
static constexpr int digits
Definition limits.h:287
static constexpr int digits10
Definition limits.h:288
static constexpr unsigned int epsilon() FL_NOEXCEPT
Definition limits.h:297
static constexpr unsigned long max() FL_NOEXCEPT
Definition limits.h:343
static constexpr unsigned long epsilon() FL_NOEXCEPT
Definition limits.h:347
static constexpr int digits10
Definition limits.h:338
static constexpr unsigned long min() FL_NOEXCEPT
Definition limits.h:340
static constexpr unsigned long round_error() FL_NOEXCEPT
Definition limits.h:348
static constexpr int digits
Definition limits.h:337
static constexpr unsigned long lowest() FL_NOEXCEPT
Definition limits.h:346
static constexpr unsigned long long round_error() FL_NOEXCEPT
Definition limits.h:388
static constexpr unsigned long long lowest() FL_NOEXCEPT
Definition limits.h:386
static constexpr unsigned long long min() FL_NOEXCEPT
Definition limits.h:384
static constexpr unsigned long long max() FL_NOEXCEPT
Definition limits.h:385
static constexpr unsigned long long epsilon() FL_NOEXCEPT
Definition limits.h:387
static constexpr unsigned short epsilon() FL_NOEXCEPT
Definition limits.h:247
static constexpr unsigned short round_error() FL_NOEXCEPT
Definition limits.h:248
static constexpr unsigned short max() FL_NOEXCEPT
Definition limits.h:245
static constexpr unsigned short min() FL_NOEXCEPT
Definition limits.h:244
static constexpr int digits
Definition limits.h:241
static constexpr unsigned short lowest() FL_NOEXCEPT
Definition limits.h:246
static constexpr int digits10
Definition limits.h:242
static constexpr T lowest() FL_NOEXCEPT
Definition limits.h:109
static constexpr T min() FL_NOEXCEPT
Definition limits.h:107
static constexpr T max() FL_NOEXCEPT
Definition limits.h:108
static constexpr T denorm_min() FL_NOEXCEPT
Definition limits.h:115
static constexpr T infinity() FL_NOEXCEPT
Definition limits.h:112
static constexpr T signaling_NaN() FL_NOEXCEPT
Definition limits.h:114
static constexpr T quiet_NaN() FL_NOEXCEPT
Definition limits.h:113
static constexpr T round_error() FL_NOEXCEPT
Definition limits.h:111
static constexpr T epsilon() FL_NOEXCEPT
Definition limits.h:110