mn_limits.hpp
Go to the documentation of this file.
1 
21 #ifndef __MINILIB_NUMERIC_LIMITS_H__
22 #define __MINILIB_NUMERIC_LIMITS_H__
23 
24 #include "mn_config.hpp"
25 
26 #include "mn_functional.hpp"
27 #include "mn_void.hpp"
28 
29 
30 
31 namespace mn {
35  enum class float_round_style {
36  indeterminate = -1,
37  toward_zero = 0,
38  to_nearest = 1,
39  toward_infinity = 2,
41  };
42 
46  enum class float_denorm_style {
48  indeterminate = -1,
50  absent = 0,
52  present = 1
53  };
54 
55  template <typename T>
57  public:
58  using value_type = T;
59 
60  static constexpr value_type bits() { return 8 * (sizeof(T) / sizeof(char)); }
61 
62  static constexpr value_type min() { return value_type(); }
63  static constexpr value_type max() { return value_type(); }
64 
65  static constexpr value_type lowest() { return value_type(); }
66  static constexpr value_type epsilon() { return value_type(); }
67  static constexpr value_type round_error() { return value_type(); }
68  static constexpr value_type denorm_min() { return value_type(); }
69  static constexpr value_type infinity() { return value_type(); }
70  static constexpr value_type quiet_NaN() { return value_type(); }
71  static constexpr value_type signaling_NaN() { return value_type(); }
72 
73  static constexpr int digits = 0;
74  static constexpr int digits10 = 0;
75  static constexpr bool is_signed = false;
76  static constexpr bool is_specialized = true;
77  static constexpr bool is_integer = true;
78  static constexpr bool is_exact = true;
79  static constexpr int max_digits10 = 0;
80  static constexpr int radix = 2;
81  static constexpr int min_exponent = 0;
82  static constexpr int min_exponent10 = 0;
83  static constexpr int max_exponent = 0;
84  static constexpr int max_exponent10 = 0;
85  static constexpr bool has_infinity = false;
86  static constexpr bool has_quiet_NaN = false;
87  static constexpr bool has_signaling_NaN = false;
88  static constexpr bool has_denorm_loss = false;
89  static constexpr bool is_iec559 = false;
90  static constexpr bool is_bounded = true;
91  static constexpr bool traps = false;
92  static constexpr bool tinyness_before = false;
95  };
96 
97  template <typename T>
98  class numeric_limits<const T> : public numeric_limits<T> { };
99 
100  template <typename T>
101  class numeric_limits<volatile T> : public numeric_limits<T> { };
102 
103  template <typename T>
104  class numeric_limits<const volatile T> : public numeric_limits<T> { };
105 
106 
110  template<>
111  class numeric_limits<bool> {
112  public:
113  using value_type = bool;
114 
115  static constexpr value_type min() { return false; }
116  static constexpr value_type max() { return true; }
117 
118  static constexpr value_type lowest() { return false; }
119  static constexpr value_type epsilon() { return false; }
120  static constexpr value_type round_error() { return false; }
121  static constexpr value_type denorm_min() { return false; }
122  static constexpr value_type infinity() { return false; }
123  static constexpr value_type quiet_NaN() { return false; }
124  static constexpr value_type signaling_NaN() { return false; }
125 
126  static constexpr int digits = 1;
127  static constexpr int digits10 = 0;
128  static constexpr bool is_signed = false;
129  static constexpr bool is_modulo = false;
130  };
131 
135  template<>
136  class numeric_limits<char> {
137  using value_type = char;
138 
139  static constexpr value_type min() { return value_type(-128); }
140  static constexpr value_type max() { return value_type(127); }
141 
142  static constexpr value_type lowest() { return value_type(-128); }
143  static constexpr value_type epsilon() { return 0; }
144  static constexpr value_type round_error() { return 0; }
145  static constexpr value_type denorm_min() { return 0; }
146  static constexpr value_type infinity() { return 0; }
147  static constexpr value_type quiet_NaN() { return 0; }
148  static constexpr value_type signaling_NaN() { return 0; }
149 
150  static constexpr int digits = 7;
151  static constexpr int digits10 = ((digits * 301) / 1000);
152  static constexpr bool is_signed = true;
153  static constexpr bool is_modulo = false;
154  };
155 
159  template<>
160  class numeric_limits<unsigned char> {
161  using value_type = unsigned char;
162 
163  static constexpr value_type min() { return value_type(0U); }
164  static constexpr value_type max() { return value_type(255U); }
165 
166  static constexpr value_type lowest() { return value_type(0U); }
167  static constexpr value_type epsilon() { return 0U; }
168  static constexpr value_type round_error() { return 0U; }
169  static constexpr value_type denorm_min() { return 0U; }
170  static constexpr value_type infinity() { return 0U; }
171  static constexpr value_type quiet_NaN() { return 0U; }
172  static constexpr value_type signaling_NaN() { return 0U; }
173 
174  static constexpr int digits = 8;
175  static constexpr int digits10 = ((digits * 301) / 1000);
176  static constexpr bool is_signed = false;
177  static constexpr bool is_modulo = true;
178  };
179 
183  template<>
184  class numeric_limits<signed char> {
185  using value_type = signed char;
186 
187  static constexpr value_type min() { return value_type(-128); }
188  static constexpr value_type max() { return value_type(127); }
189 
190  static constexpr value_type lowest() { return value_type(-128); }
191  static constexpr value_type epsilon() { return 0; }
192  static constexpr value_type round_error() { return 0; }
193  static constexpr value_type denorm_min() { return 0; }
194  static constexpr value_type infinity() { return 0; }
195  static constexpr value_type quiet_NaN() { return 0; }
196  static constexpr value_type signaling_NaN() { return 0; }
197 
198  static constexpr int digits = 7;
199  static constexpr int digits10 = ((digits * 301) / 1000);
200  static constexpr bool is_signed = true;
201  static constexpr bool is_modulo = false;
202  };
203 
207  template<>
208  class numeric_limits<short> {
209  using value_type = short;
210 
211  static constexpr value_type min() { return value_type(-32768); }
212  static constexpr value_type max() { return value_type(32767); }
213 
214  static constexpr value_type lowest() { return value_type(-32768); }
215  static constexpr value_type epsilon() { return 0; }
216  static constexpr value_type round_error() { return 0; }
217  static constexpr value_type denorm_min() { return 0; }
218  static constexpr value_type infinity() { return 0; }
219  static constexpr value_type quiet_NaN() { return 0; }
220  static constexpr value_type signaling_NaN() { return 0; }
221 
222  static constexpr int digits = 15;
223  static constexpr int digits10 = ((digits * 301) / 1000);
224  static constexpr bool is_signed = true;
225  static constexpr bool is_modulo = false;
226  };
227 
231  template<>
232  class numeric_limits<unsigned short> {
233  using value_type = unsigned short;
234 
235  static constexpr value_type min() { return value_type(0U); }
236  static constexpr value_type max() { return value_type(65535U); }
237 
238  static constexpr value_type lowest() { return value_type(0U); }
239  static constexpr value_type epsilon() { return 0U; }
240  static constexpr value_type round_error() { return 0U; }
241  static constexpr value_type denorm_min() { return 0U; }
242  static constexpr value_type infinity() { return 0U; }
243  static constexpr value_type quiet_NaN() { return 0U; }
244  static constexpr value_type signaling_NaN() { return 0U; }
245 
246  static constexpr int digits = 16;
247  static constexpr int digits10 = ((digits * 301) / 1000);
248  static constexpr bool is_signed = false;
249  static constexpr bool is_modulo = true;
250  };
251 
255  template<>
256  class numeric_limits<int> {
257  using value_type = int;
258 
259  static constexpr value_type min() { return value_type(-2147483648); }
260  static constexpr value_type max() { return value_type(2147483647); }
261 
262  static constexpr value_type lowest() { return value_type(-2147483648); }
263  static constexpr value_type epsilon() { return 0; }
264  static constexpr value_type round_error() { return 0; }
265  static constexpr value_type denorm_min() { return 0; }
266  static constexpr value_type infinity() { return 0; }
267  static constexpr value_type quiet_NaN() { return 0; }
268  static constexpr value_type signaling_NaN() { return 0; }
269 
270  static constexpr int digits = 31;
271  static constexpr int digits10 = ((digits * 301) / 1000);
272  static constexpr bool is_signed = true;
273  static constexpr bool is_modulo = false;
274  };
275 
279  template<>
280  class numeric_limits<unsigned int> {
281  using value_type = unsigned int;
282 
283  static constexpr value_type min() { return value_type(0U); }
284  static constexpr value_type max() { return value_type(4294967295U); }
285 
286  static constexpr value_type lowest() { return value_type(0U); }
287  static constexpr value_type epsilon() { return 0U; }
288  static constexpr value_type round_error() { return 0U; }
289  static constexpr value_type denorm_min() { return 0U; }
290  static constexpr value_type infinity() { return 0U; }
291  static constexpr value_type quiet_NaN() { return 0U; }
292  static constexpr value_type signaling_NaN() { return 0U; }
293 
294  static constexpr int digits = 32;
295  static constexpr int digits10 = ((digits * 301) / 1000);
296  static constexpr bool is_signed = false;
297  static constexpr bool is_modulo = true;
298  };
299 
303  template<>
304  class numeric_limits<long> {
305  using value_type = long;
306 
307  static constexpr value_type min() { return value_type(-9223372036854775807 - 1L); }
308  static constexpr value_type max() { return value_type(9223372036854775807); }
309 
310  static constexpr value_type lowest() { return value_type(-9223372036854775807 - 1L); }
311  static constexpr value_type epsilon() { return 0; }
312  static constexpr value_type round_error() { return 0; }
313  static constexpr value_type denorm_min() { return 0; }
314  static constexpr value_type infinity() { return 0; }
315  static constexpr value_type quiet_NaN() { return 0; }
316  static constexpr value_type signaling_NaN() { return 0; }
317 
318  static constexpr int digits = 63;
319  static constexpr int digits10 = ((digits * 301) / 1000);
320  static constexpr bool is_signed = true;
321  static constexpr bool is_modulo = false;
322  };
323 
327  template<>
328  class numeric_limits<unsigned long> {
329  using value_type = unsigned long;
330 
331  static constexpr value_type min() { return value_type(0U); }
332  static constexpr value_type max() { return value_type(18446744073709551615U); }
333 
334  static constexpr value_type lowest() { return value_type(0U); }
335  static constexpr value_type epsilon() { return 0U; }
336  static constexpr value_type round_error() { return 0U; }
337  static constexpr value_type denorm_min() { return 0U; }
338  static constexpr value_type infinity() { return 0U; }
339  static constexpr value_type quiet_NaN() { return 0U; }
340  static constexpr value_type signaling_NaN() { return 0U; }
341 
342  static constexpr int digits = 64;
343  static constexpr int digits10 = ((digits * 301) / 1000);
344  static constexpr bool is_signed = false;
345  static constexpr bool is_modulo = true;
346  };
347 
351  template<>
352  class numeric_limits<long long> {
353  using value_type = long long;
354 
355  static constexpr value_type min() { return value_type(-9223372036854775807LL - 1LL); }
356  static constexpr value_type max() { return value_type(9223372036854775807LL); }
357 
358  static constexpr value_type lowest() { return value_type(-9223372036854775807LL - 1LL); }
359  static constexpr value_type epsilon() { return 0; }
360  static constexpr value_type round_error() { return 0; }
361  static constexpr value_type denorm_min() { return 0; }
362  static constexpr value_type infinity() { return 0; }
363  static constexpr value_type quiet_NaN() { return 0; }
364  static constexpr value_type signaling_NaN() { return 0; }
365 
366  static constexpr int digits = 63;
367  static constexpr int digits10 = ((digits * 301) / 1000);
368  static constexpr bool is_signed = true;
369  static constexpr bool is_modulo = false;
370  };
371 
375  template<>
376  class numeric_limits<unsigned long long> {
377  using value_type = unsigned long long;
378 
379  static constexpr value_type min() { return value_type(0U); }
380  static constexpr value_type max() { return value_type(18446744073709551615ULL); }
381 
382  static constexpr value_type lowest() { return value_type(0U); }
383  static constexpr value_type epsilon() { return 0; }
384  static constexpr value_type round_error() { return 0; }
385  static constexpr value_type denorm_min() { return 0; }
386  static constexpr value_type infinity() { return 0; }
387  static constexpr value_type quiet_NaN() { return 0; }
388  static constexpr value_type signaling_NaN() { return 0; }
389 
390  static constexpr int digits = 64;
391  static constexpr int digits10 = ((digits * 301) / 1000);
392  static constexpr bool is_signed = true;
393  static constexpr bool is_modulo = false;
394  };
395 
396 
400  template<>
401  class numeric_limits<float> {
402  using value_type = float;
403 
404  static constexpr value_type min() { return __FLT_MIN__; }
405  static constexpr value_type max() { return __FLT_MAX__; }
406 
407  static constexpr value_type lowest() { return -__FLT_MAX__; }
408  static constexpr value_type epsilon() { return __FLT_EPSILON__; }
409  static constexpr value_type denorm_min() { return __FLT_MIN__; }
410  static constexpr value_type infinity() { return __builtin_huge_valf(); }
411  static constexpr value_type quiet_NaN() { return __builtin_nanf(""); }
412  static constexpr value_type signaling_NaN() { return __builtin_nansf(""); }
413 
414  static constexpr int digits = __FLT_MANT_DIG__;
415  static constexpr int digits10 = __FLT_DIG__;
416  static constexpr int max_digits10 = ((digits * 301) / 1000) + 2;
417 
418  static constexpr int min_exponent = __FLT_MIN_EXP__;
419  static constexpr int min_exponent10 = __FLT_MIN_10_EXP__;
420  static constexpr int max_exponent = __FLT_MAX_EXP__;
421  static constexpr int max_exponent10 = __FLT_MAX_10_EXP__;
422 
423  static constexpr bool is_specialized = true;
424  static constexpr bool is_signed = true;
425  static constexpr bool is_integer = false;
426  static constexpr bool is_exact = false;
427  static constexpr int radix = 2;
428  static constexpr bool has_infinity = true;
429  static constexpr bool has_quiet_NaN = true;
430  static constexpr bool has_signaling_NaN = true;
431  static constexpr bool has_denorm_loss = false;
432  static constexpr bool is_iec559 = false;
433  static constexpr bool is_bounded = true;
434  static constexpr bool is_modulo = false;
435  static constexpr bool traps = false;
436  static constexpr bool tinyness_before = false;
439 
440  static value_type round_error() { return value_type(0.5f); }
441  };
442 
443 
447  template<>
448  class numeric_limits<double> {
449  using value_type = double;
450 
451  static constexpr value_type min() { return __DBL_MIN__; }
452  static constexpr value_type max() { return __DBL_MAX__; }
453 
454  static constexpr value_type lowest() { return -__DBL_MAX__; }
455  static constexpr value_type epsilon() { return __DBL_EPSILON__; }
456  static constexpr value_type denorm_min() { return __DBL_MIN__; }
457  static constexpr value_type infinity() { return __builtin_huge_val(); }
458  static constexpr value_type quiet_NaN() { return __builtin_nan(""); }
459  static constexpr value_type signaling_NaN() { return __builtin_nans("");; }
460 
461  static constexpr int digits = __DBL_MANT_DIG__;
462  static constexpr int digits10 = __DBL_DIG__;
463  static constexpr int max_digits10 = ((digits * 301) / 1000) + 2;
464 
465  static constexpr int min_exponent = __DBL_MIN_EXP__;
466  static constexpr int min_exponent10 = __DBL_MIN_10_EXP__;
467  static constexpr int max_exponent = __DBL_MAX_EXP__;
468  static constexpr int max_exponent10 = __DBL_MAX_10_EXP__;
469 
470  static constexpr bool is_specialized = true;
471  static constexpr bool is_signed = true;
472  static constexpr bool is_integer = false;
473  static constexpr bool is_exact = false;
474  static constexpr int radix = 2;
475  static constexpr bool has_infinity = true;
476  static constexpr bool has_quiet_NaN = true;
477  static constexpr bool has_signaling_NaN = true;
478  static constexpr bool has_denorm_loss = false;
479  static constexpr bool is_iec559 = false;
480  static constexpr bool is_bounded = true;
481  static constexpr bool is_modulo = false;
482  static constexpr bool traps = false;
483  static constexpr bool tinyness_before = false;
486 
487  static value_type round_error() { return value_type(0.5); }
488  };
489 
493  template<>
494  class numeric_limits<long double> {
495  using value_type = long double;
496 
497  static constexpr value_type min() { return __LDBL_MIN__; }
498  static constexpr value_type max() { return __LDBL_MAX__; }
499 
500  static constexpr value_type lowest() { return -__LDBL_MAX__; }
501  static constexpr value_type epsilon() { return __LDBL_EPSILON__; }
502  static constexpr value_type denorm_min() { return __LDBL_MIN__; }
503  static constexpr value_type infinity() { return __builtin_huge_val(); }
504  static constexpr value_type quiet_NaN() { return __builtin_nanl(""); }
505  static constexpr value_type signaling_NaN() { return __builtin_nansl("");; }
506 
507  static constexpr int digits = __LDBL_MANT_DIG__;
508  static constexpr int digits10 = __LDBL_DIG__;
509  static constexpr int max_digits10 = ((__LDBL_MANT_DIG__ * 301) / 1000) + 2;
510 
511  static constexpr int min_exponent = __LDBL_MIN_EXP__;
512  static constexpr int min_exponent10 = __LDBL_MIN_10_EXP__;
513  static constexpr int max_exponent = __LDBL_MAX_EXP__;
514  static constexpr int max_exponent10 = __LDBL_MAX_10_EXP__;
515 
516  static constexpr bool is_specialized = true;
517  static constexpr bool is_signed = true;
518  static constexpr bool is_integer = false;
519  static constexpr bool is_exact = false;
520  static constexpr int radix = 2;
521  static constexpr bool has_infinity = true;
522  static constexpr bool has_quiet_NaN = true;
523  static constexpr bool has_signaling_NaN = true;
524  static constexpr bool has_denorm_loss = false;
525  static constexpr bool is_iec559 = false;
526  static constexpr bool is_bounded = true;
527  static constexpr bool is_modulo = false;
528  static constexpr bool traps = false;
529  static constexpr bool tinyness_before = false;
532 
533  static value_type round_error() { return value_type(0.5); }
534  };
535 
536 }
537 
538 #endif // __MINILIB_NUMERIC_LIMITS_H__
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:121
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:123
bool value_type
Definition: mn_limits.hpp:113
static constexpr value_type infinity()
Definition: mn_limits.hpp:122
static constexpr value_type max()
Definition: mn_limits.hpp:116
static constexpr value_type lowest()
Definition: mn_limits.hpp:118
static constexpr value_type min()
Definition: mn_limits.hpp:115
static constexpr value_type round_error()
Definition: mn_limits.hpp:120
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:124
static constexpr value_type epsilon()
Definition: mn_limits.hpp:119
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:147
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:145
static constexpr value_type lowest()
Definition: mn_limits.hpp:142
static constexpr value_type epsilon()
Definition: mn_limits.hpp:143
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:148
static constexpr value_type max()
Definition: mn_limits.hpp:140
static constexpr value_type infinity()
Definition: mn_limits.hpp:146
static constexpr value_type round_error()
Definition: mn_limits.hpp:144
char value_type
Definition: mn_limits.hpp:137
static constexpr value_type min()
Definition: mn_limits.hpp:139
static constexpr value_type epsilon()
Definition: mn_limits.hpp:455
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:458
static constexpr value_type lowest()
Definition: mn_limits.hpp:454
static value_type round_error()
Definition: mn_limits.hpp:487
static constexpr value_type infinity()
Definition: mn_limits.hpp:457
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:456
static constexpr value_type min()
Definition: mn_limits.hpp:451
static constexpr value_type max()
Definition: mn_limits.hpp:452
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:459
double value_type
Definition: mn_limits.hpp:449
static constexpr value_type epsilon()
Definition: mn_limits.hpp:408
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:409
static constexpr value_type min()
Definition: mn_limits.hpp:404
static constexpr value_type infinity()
Definition: mn_limits.hpp:410
float value_type
Definition: mn_limits.hpp:402
static constexpr value_type lowest()
Definition: mn_limits.hpp:407
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:411
static constexpr value_type max()
Definition: mn_limits.hpp:405
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:412
static value_type round_error()
Definition: mn_limits.hpp:440
static constexpr value_type infinity()
Definition: mn_limits.hpp:266
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:265
int value_type
Definition: mn_limits.hpp:257
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:268
static constexpr value_type epsilon()
Definition: mn_limits.hpp:263
static constexpr value_type round_error()
Definition: mn_limits.hpp:264
static constexpr value_type lowest()
Definition: mn_limits.hpp:262
static constexpr value_type max()
Definition: mn_limits.hpp:260
static constexpr value_type min()
Definition: mn_limits.hpp:259
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:267
static constexpr value_type min()
Definition: mn_limits.hpp:307
static constexpr value_type infinity()
Definition: mn_limits.hpp:314
static constexpr value_type lowest()
Definition: mn_limits.hpp:310
long value_type
Definition: mn_limits.hpp:305
static constexpr value_type max()
Definition: mn_limits.hpp:308
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:315
static constexpr value_type round_error()
Definition: mn_limits.hpp:312
static constexpr value_type epsilon()
Definition: mn_limits.hpp:311
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:313
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:316
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:504
static constexpr value_type min()
Definition: mn_limits.hpp:497
long double value_type
Definition: mn_limits.hpp:495
static constexpr value_type max()
Definition: mn_limits.hpp:498
static constexpr value_type lowest()
Definition: mn_limits.hpp:500
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:502
static value_type round_error()
Definition: mn_limits.hpp:533
static constexpr value_type infinity()
Definition: mn_limits.hpp:503
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:505
static constexpr value_type epsilon()
Definition: mn_limits.hpp:501
static constexpr value_type min()
Definition: mn_limits.hpp:355
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:363
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:361
static constexpr value_type round_error()
Definition: mn_limits.hpp:360
static constexpr value_type infinity()
Definition: mn_limits.hpp:362
long long value_type
Definition: mn_limits.hpp:353
static constexpr value_type epsilon()
Definition: mn_limits.hpp:359
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:364
static constexpr value_type max()
Definition: mn_limits.hpp:356
static constexpr value_type lowest()
Definition: mn_limits.hpp:358
short value_type
Definition: mn_limits.hpp:209
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:217
static constexpr value_type min()
Definition: mn_limits.hpp:211
static constexpr value_type lowest()
Definition: mn_limits.hpp:214
static constexpr value_type epsilon()
Definition: mn_limits.hpp:215
static constexpr value_type max()
Definition: mn_limits.hpp:212
static constexpr value_type infinity()
Definition: mn_limits.hpp:218
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:220
static constexpr value_type round_error()
Definition: mn_limits.hpp:216
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:219
static constexpr value_type lowest()
Definition: mn_limits.hpp:190
static constexpr value_type infinity()
Definition: mn_limits.hpp:194
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:196
static constexpr value_type round_error()
Definition: mn_limits.hpp:192
signed char value_type
Definition: mn_limits.hpp:185
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:195
static constexpr value_type max()
Definition: mn_limits.hpp:188
static constexpr value_type min()
Definition: mn_limits.hpp:187
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:193
static constexpr value_type epsilon()
Definition: mn_limits.hpp:191
static constexpr value_type lowest()
Definition: mn_limits.hpp:166
static constexpr value_type max()
Definition: mn_limits.hpp:164
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:169
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:172
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:171
unsigned char value_type
Definition: mn_limits.hpp:161
static constexpr value_type min()
Definition: mn_limits.hpp:163
static constexpr value_type round_error()
Definition: mn_limits.hpp:168
static constexpr value_type epsilon()
Definition: mn_limits.hpp:167
static constexpr value_type infinity()
Definition: mn_limits.hpp:170
static constexpr value_type max()
Definition: mn_limits.hpp:284
static constexpr value_type round_error()
Definition: mn_limits.hpp:288
static constexpr value_type infinity()
Definition: mn_limits.hpp:290
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:292
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:289
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:291
static constexpr value_type lowest()
Definition: mn_limits.hpp:286
static constexpr value_type epsilon()
Definition: mn_limits.hpp:287
static constexpr value_type min()
Definition: mn_limits.hpp:283
unsigned int value_type
Definition: mn_limits.hpp:281
unsigned long value_type
Definition: mn_limits.hpp:329
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:337
static constexpr value_type lowest()
Definition: mn_limits.hpp:334
static constexpr value_type round_error()
Definition: mn_limits.hpp:336
static constexpr value_type min()
Definition: mn_limits.hpp:331
static constexpr value_type max()
Definition: mn_limits.hpp:332
static constexpr value_type infinity()
Definition: mn_limits.hpp:338
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:339
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:340
static constexpr value_type epsilon()
Definition: mn_limits.hpp:335
static constexpr value_type epsilon()
Definition: mn_limits.hpp:383
static constexpr value_type min()
Definition: mn_limits.hpp:379
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:388
static constexpr value_type infinity()
Definition: mn_limits.hpp:386
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:387
static constexpr value_type lowest()
Definition: mn_limits.hpp:382
unsigned long long value_type
Definition: mn_limits.hpp:377
static constexpr value_type max()
Definition: mn_limits.hpp:380
static constexpr value_type round_error()
Definition: mn_limits.hpp:384
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:385
static constexpr value_type infinity()
Definition: mn_limits.hpp:242
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:241
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:244
static constexpr value_type epsilon()
Definition: mn_limits.hpp:239
static constexpr value_type max()
Definition: mn_limits.hpp:236
static constexpr value_type min()
Definition: mn_limits.hpp:235
static constexpr value_type round_error()
Definition: mn_limits.hpp:240
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:243
unsigned short value_type
Definition: mn_limits.hpp:233
static constexpr value_type lowest()
Definition: mn_limits.hpp:238
Definition: mn_limits.hpp:56
static constexpr float_round_style round_style
Definition: mn_limits.hpp:94
static constexpr value_type max()
Definition: mn_limits.hpp:63
static constexpr value_type min()
Definition: mn_limits.hpp:62
static constexpr bool is_iec559
Definition: mn_limits.hpp:89
static constexpr int min_exponent10
Definition: mn_limits.hpp:82
static constexpr bool is_integer
Definition: mn_limits.hpp:77
static constexpr int radix
Definition: mn_limits.hpp:80
static constexpr bool has_quiet_NaN
Definition: mn_limits.hpp:86
static constexpr bool is_exact
Definition: mn_limits.hpp:78
static constexpr value_type signaling_NaN()
Definition: mn_limits.hpp:71
static constexpr bool has_signaling_NaN
Definition: mn_limits.hpp:87
static constexpr bool tinyness_before
Definition: mn_limits.hpp:92
static constexpr value_type infinity()
Definition: mn_limits.hpp:69
static constexpr value_type round_error()
Definition: mn_limits.hpp:67
static constexpr value_type lowest()
Definition: mn_limits.hpp:65
static constexpr bool has_infinity
Definition: mn_limits.hpp:85
static constexpr int digits10
Definition: mn_limits.hpp:74
static constexpr int digits
Definition: mn_limits.hpp:73
static constexpr value_type bits()
Definition: mn_limits.hpp:60
static constexpr value_type epsilon()
Definition: mn_limits.hpp:66
static constexpr int min_exponent
Definition: mn_limits.hpp:81
static constexpr bool has_denorm_loss
Definition: mn_limits.hpp:88
static constexpr int max_exponent
Definition: mn_limits.hpp:83
static constexpr int max_digits10
Definition: mn_limits.hpp:79
T value_type
Definition: mn_limits.hpp:58
static constexpr value_type quiet_NaN()
Definition: mn_limits.hpp:70
static constexpr bool is_specialized
Definition: mn_limits.hpp:76
static constexpr bool is_bounded
Definition: mn_limits.hpp:90
static constexpr int max_exponent10
Definition: mn_limits.hpp:84
static constexpr float_denorm_style has_denorm
Definition: mn_limits.hpp:93
static constexpr value_type denorm_min()
Definition: mn_limits.hpp:68
static constexpr bool traps
Definition: mn_limits.hpp:91
struct mn::memory::detail::ptr_difference T
Definition: mn_atomic_singleton.hpp:38
Definition: mn_allocator_typetraits.hpp:25
float_denorm_style
Describes the denormalization for floating-point types.
Definition: mn_limits.hpp:46
@ indeterminate
Indeterminate at compile time whether denormalized values are allowed.
@ present
The type allows denormalized values.
@ absent
The type does not allow denormalized values.
float_round_style
Describes the rounding style for floating-point types.
Definition: mn_limits.hpp:35
@ toward_infinity
To the nearest representable value.
@ toward_zero
Intermediate.
@ toward_neg_infinity
To infinity.
is_signed
Definition: mn_typetraits.hpp:392