![]() |
alpaka
Abstraction Library for Parallel Kernel Acceleration
|
Implementation of a complex number usable on host and device. More...
#include <Complex.hpp>
Public Types | |
| using | value_type = T |
| Type of the real and imaginary parts. | |
Public Member Functions | |
| constexpr | Complex (Complex const &other)=default |
| Copy constructor. | |
| template<typename U> | |
| constexpr | Complex (Complex< U > const &other) |
| Constructor from Complex of another type. | |
| constexpr | Complex (std::complex< T > const &other) |
| Constructor from std::complex. | |
| constexpr | Complex (T const &real=T{}, T const &imag=T{}) |
| Constructor from the given real and imaginary parts. | |
| constexpr T | imag () const |
| Get the imaginary part. | |
| constexpr void | imag (T value) |
| Set the imaginary part. | |
| constexpr | operator std::complex< T > () const |
| Conversion to std::complex. | |
| template<typename U> | |
| constexpr Complex & | operator*= (Complex< U > const &other) |
| Multiplication assignment with a complex number. | |
| constexpr Complex & | operator*= (T const &other) |
| Multiplication assignment with a real number. | |
| template<typename U> | |
| constexpr Complex & | operator+= (Complex< U > const &other) |
| Addition assignment with a complex number. | |
| constexpr Complex & | operator+= (T const &other) |
| Addition assignment with a real number. | |
| template<typename U> | |
| constexpr Complex & | operator-= (Complex< U > const &other) |
| Subtraction assignment with a complex number. | |
| constexpr Complex & | operator-= (T const &other) |
| Subtraction assignment with a real number. | |
| template<typename U> | |
| constexpr Complex & | operator/= (Complex< U > const &other) |
| Division assignment with a complex number. | |
| constexpr Complex & | operator/= (T const &other) |
| Division assignment with a real number. | |
| Complex & | operator= (Complex const &)=default |
| Assignment. | |
| constexpr T | real () const |
| Get the real part. | |
| constexpr void | real (T value) |
| Set the real part. | |
Private Attributes | |
| T | m_imag |
| T | m_real |
| Real and imaginary parts, storage enables array-oriented access. | |
Implementation of a complex number usable on host and device.
It follows the layout of std::complex and so array-oriented access. The class template implements all methods and operators as std::complex<T>. Additionally, it provides an implicit conversion to and from std::complex<T>. All methods besides operators << and >> are host-device. It does not provide non-member functions of std::complex besides the operators. Those are provided the same way as alpaka math functions for real numbers.
Note that unlike most of alpaka, this is a concrete type template, and not merely a concept.
Naming and order of the methods match https://en.cppreference.com/w/cpp/numeric/complex in C++17. Implementation chose to not extend it e.g. by adding constexpr to some places that would get it in C++20. The motivation is that with internal conversion to std::complex<T> for CPU backends, it would define the common interface for generic code anyways. So it is more clear to have alpaka's interface exactly matching when possible, and not "improving".
| T | type of the real and imaginary part: float, double, or long double. |
Definition at line 41 of file Complex.hpp.
| using alpaka::math::internal::Complex< T >::value_type = T |
Type of the real and imaginary parts.
Definition at line 48 of file Complex.hpp.
|
inlineconstexpr |
Constructor from the given real and imaginary parts.
Definition at line 51 of file Complex.hpp.
|
constexprdefault |
Copy constructor.
|
inlineconstexpr |
Constructor from Complex of another type.
Definition at line 60 of file Complex.hpp.
|
inlineconstexpr |
Constructor from std::complex.
Definition at line 67 of file Complex.hpp.
|
inlineconstexpr |
Get the imaginary part.
Definition at line 93 of file Complex.hpp.
|
inlineconstexpr |
Set the imaginary part.
Definition at line 99 of file Complex.hpp.
|
inlineconstexpr |
Conversion to std::complex.
Definition at line 72 of file Complex.hpp.
|
inlineconstexpr |
Multiplication assignment with a complex number.
Definition at line 146 of file Complex.hpp.
|
inlineconstexpr |
Multiplication assignment with a real number.
Definition at line 137 of file Complex.hpp.
|
inlineconstexpr |
Addition assignment with a complex number.
Definition at line 113 of file Complex.hpp.
|
inlineconstexpr |
Addition assignment with a real number.
Definition at line 105 of file Complex.hpp.
|
inlineconstexpr |
Subtraction assignment with a complex number.
Definition at line 129 of file Complex.hpp.
|
inlineconstexpr |
Subtraction assignment with a real number.
Definition at line 121 of file Complex.hpp.
|
inlineconstexpr |
Division assignment with a complex number.
Definition at line 165 of file Complex.hpp.
|
inlineconstexpr |
Division assignment with a real number.
Definition at line 156 of file Complex.hpp.
|
default |
Assignment.
|
inlineconstexpr |
Get the real part.
Definition at line 81 of file Complex.hpp.
|
inlineconstexpr |
Set the real part.
Definition at line 87 of file Complex.hpp.
|
private |
Definition at line 175 of file Complex.hpp.
|
private |
Real and imaginary parts, storage enables array-oriented access.
Definition at line 175 of file Complex.hpp.