Iros
 
Loading...
Searching...
No Matches
numeric_limits.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/meta/language.h"
4
5namespace di::math {
6template<typename T>
8
9template<concepts::UnsignedInteger T>
10struct NumericLimits<T> {
11 constexpr static T max = static_cast<T>(-1);
12 constexpr static T min = 0;
13 constexpr static int bits = sizeof(T) * 8;
14 constexpr static int digits = bits;
15};
16
17template<concepts::SignedInteger T>
18struct NumericLimits<T> {
20
21 constexpr static T max = static_cast<T>(static_cast<Unsigned>(-1) >> static_cast<Unsigned>(1));
22 constexpr static T min = ~max;
23 constexpr static int bits = sizeof(T) * 8;
24 constexpr static int digits = bits - 1;
25};
26
27template<>
28struct NumericLimits<float> {
29 constexpr static auto quiet_nan = __builtin_nanf("");
30 constexpr static auto signaling_nan = __builtin_nansf("");
31 constexpr static auto infinity = __builtin_huge_valf();
32};
33
34template<>
35struct NumericLimits<double> {
36 constexpr static auto quiet_nan = __builtin_nan("");
37 constexpr static auto signaling_nan = __builtin_nans("");
38 constexpr static auto infinity = __builtin_huge_val();
39};
40
41template<>
42struct NumericLimits<long double> {
43 constexpr static auto quiet_nan = __builtin_nanl("");
44 constexpr static auto signaling_nan = __builtin_nansl("");
45 constexpr static auto infinity = __builtin_huge_vall();
46};
47}
48
49namespace di {
51}
Definition abs.h:10
detail::MakeUnsignedHelper< RemoveCV< T > >::Type MakeUnsigned
Definition language.h:362
Definition zstring_parser.h:9
Definition numeric_limits.h:7
static constexpr auto signaling_nan
Definition numeric_limits.h:44
static constexpr int bits
Definition numeric_limits.h:13
static constexpr T min
Definition numeric_limits.h:12
meta::MakeUnsigned< T > Unsigned
Definition numeric_limits.h:19
static constexpr auto infinity
Definition numeric_limits.h:45
static constexpr int digits
Definition numeric_limits.h:14
static constexpr auto quiet_nan
Definition numeric_limits.h:43
static constexpr auto quiet_nan
Definition numeric_limits.h:29
static constexpr T max
Definition numeric_limits.h:11
static constexpr auto infinity
Definition numeric_limits.h:31
static constexpr auto quiet_nan
Definition numeric_limits.h:36
static constexpr auto infinity
Definition numeric_limits.h:38
static constexpr auto signaling_nan
Definition numeric_limits.h:37
static constexpr auto signaling_nan
Definition numeric_limits.h:30