alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
constants.hpp
Go to the documentation of this file.
1/* Copyright 2023 Benjamin Worpitz, Matthias Werner, Jan Stephan, Bernhard Manfred Gruber, Sergei Bastrakov,
2 * Andrea Bocci, René Widera
3 * SPDX-License-Identifier: MPL-2.0
4 */
5
6#pragma once
7
9
10#include <cmath>
11#include <complex>
12#if __has_include(<version>) // Not part of the C++17 standard but all major standard libraries include this
13# include <version>
14#endif
15#ifdef __cpp_lib_math_constants
16# include <numbers>
17#endif
18
19namespace alpaka::math
20{
21 namespace constants
22 {
23#ifdef __cpp_lib_math_constants
24 inline constexpr double e = std::numbers::e;
25 inline constexpr double log2e = std::numbers::log2e;
26 inline constexpr double log10e = std::numbers::log10e;
27 inline constexpr double pi = std::numbers::pi;
28 inline constexpr double inv_pi = std::numbers::inv_pi;
29 inline constexpr double ln2 = std::numbers::ln2;
30 inline constexpr double ln10 = std::numbers::ln10;
31 inline constexpr double sqrt2 = std::numbers::sqrt2;
32
33 template<typename T>
34 inline constexpr T e_v = std::numbers::e_v<T>;
35
36 template<typename T>
37 inline constexpr T log2e_v = std::numbers::log2e_v<T>;
38
39 template<typename T>
40 inline constexpr T log10e_v = std::numbers::log10e_v<T>;
41
42 template<typename T>
43 inline constexpr T pi_v = std::numbers::pi_v<T>;
44
45 template<typename T>
46 inline constexpr T inv_pi_v = std::numbers::inv_pi_v<T>;
47
48 template<typename T>
49 inline constexpr T ln2_v = std::numbers::ln2_v<T>;
50
51 template<typename T>
52 inline constexpr T ln10_v = std::numbers::ln10_v<T>;
53
54 template<typename T>
55 inline constexpr T sqrt2_v = std::numbers::sqrt2_v<T>;
56#else
57 inline constexpr double e = M_E;
58 inline constexpr double log2e = M_LOG2E;
59 inline constexpr double log10e = M_LOG10E;
60 inline constexpr double pi = M_PI;
61 inline constexpr double inv_pi = M_1_PI;
62 inline constexpr double ln2 = M_LN2;
63 inline constexpr double ln10 = M_LN10;
64 inline constexpr double sqrt2 = M_SQRT2;
65
66 template<typename T>
67 inline constexpr T e_v = static_cast<T>(e);
68
69 template<typename T>
70 inline constexpr T log2e_v = static_cast<T>(log2e);
71
72 template<typename T>
73 inline constexpr T log10e_v = static_cast<T>(log10e);
74
75 template<typename T>
76 inline constexpr T pi_v = static_cast<T>(pi);
77
78 template<typename T>
79 inline constexpr T inv_pi_v = static_cast<T>(inv_pi);
80
81 template<typename T>
82 inline constexpr T ln2_v = static_cast<T>(ln2);
83
84 template<typename T>
85 inline constexpr T ln10_v = static_cast<T>(ln10);
86
87 template<typename T>
88 inline constexpr T sqrt2_v = static_cast<T>(sqrt2);
89
90 // Use predefined float constants when available
91# if defined(M_Ef)
92 template<>
93 inline constexpr float e_v<float> = M_Ef;
94# endif
95
96# if defined(M_LOG2Ef)
97 template<>
98 inline constexpr float log2e_v<float> = M_LOG2Ef;
99# endif
100
101# if defined(M_LOG10Ef)
102 template<>
103 inline constexpr float log10e_v<float> = M_LOG10Ef;
104# endif
105
106# if defined(M_PIf)
107 template<>
108 inline constexpr float pi_v<float> = M_PIf;
109# endif
110
111# if defined(M_1_PIf)
112 template<>
113 inline constexpr float inv_pi_v<float> = M_1_PIf;
114# endif
115
116# if defined(M_LN2f)
117 template<>
118 inline constexpr float ln2_v<float> = M_LN2f;
119# endif
120
121# if defined(M_LN10f)
122 template<>
123 inline constexpr float ln10_v<float> = M_LN10f;
124# endif
125
126# if defined(M_SQRT2f)
127 template<>
128 inline constexpr float sqrt2_v<float> = M_SQRT2f;
129# endif
130
131#endif
132 } // namespace constants
133
134} // namespace alpaka::math
constexpr double inv_pi
Definition constants.hpp:61
constexpr double log10e
Definition constants.hpp:59
constexpr double e
Definition constants.hpp:57
constexpr double ln10
Definition constants.hpp:63
constexpr double log2e
Definition constants.hpp:58
constexpr double sqrt2
Definition constants.hpp:64
constexpr double ln2
Definition constants.hpp:62
constexpr double pi
Definition constants.hpp:60