3#include <uni20/config.hpp>
4#if UNI20_HAS_FLOAT128 && UNI20_FLOAT128_PROVIDER_MPLAPACK
5#include <mplapack_config.h>
33template <
typename Real>
using standard_complex = std::complex<Real>;
34template <
typename Real>
struct complex_type
36 using type = standard_complex<Real>;
39template <>
struct complex_type<mpreal>
41 using type = mpcomplex;
51using float80 =
long double;
52static_assert(std::numeric_limits<float80>::is_iec559 && std::numeric_limits<float80>::radix == 2 &&
53 std::numeric_limits<float80>::digits == 64 && std::numeric_limits<float80>::min_exponent == -16381 &&
54 std::numeric_limits<float80>::max_exponent == 16384 &&
55 std::numeric_limits<float80>::denorm_min() > 0 &&
56 std::numeric_limits<float80>::denorm_min() < std::numeric_limits<float80>::min(),
57 "Uni20's configured fp80 format must match the consuming compiler's long double");
66template <
typename Real>
using complex =
typename detail::complex_type<Real>::type;
78#if UNI20_HAS_FLOAT128 && UNI20_FLOAT128_PROVIDER_MPLAPACK
85using float128 = mplapack_binary128_t;
91using cfloat128 = complex256;
110 !std::is_same_v<typename remove_proxy_reference<std::remove_cvref_t<R>>::type, std::remove_cvref_t<R>>;
119 std::remove_reference_t<R>>;
128 using type = std::remove_cvref_t<Value>;
Exact rational complex value or owning finite-precision MPC approximation.
Definition mpcomplex.hpp:57
Owning exact rational or finite-precision MPFR real, with eager arithmetic.
Definition mpreal.hpp:74
typename detail::complex_type< Real >::type complex
Project-level complex scalar spelling.
Definition types.hpp:66
Definition async/async.hpp:26
float float32
Definition types.hpp:22
double float64
Definition types.hpp:23
complex< double > complex128
Definition types.hpp:69
constexpr bool is_proxy_reference_v
Detects whether a type is considered a proxy reference.
Definition types.hpp:109
std::ptrdiff_t size_type
Signed size and index type, used for tensor extents and indexing.
Definition types.hpp:18
std::conditional_t< is_proxy_reference_v< R >, typename remove_proxy_reference< std::remove_cvref_t< R > >::type, std::remove_reference_t< R > > remove_proxy_reference_t
Extracts the underlying value type of a proxy (or normal) reference.
Definition types.hpp:119
complex< float > complex64
Definition types.hpp:68
std::ptrdiff_t index_type
Definition types.hpp:19
typename logical_value< std::remove_cvref_t< Value > >::type logical_value_t
Backend-neutral logical value represented by an execution expression.
Definition types.hpp:132
complex< double > cdouble
Definition types.hpp:76
complex< float > cfloat
Definition types.hpp:75
Map an execution expression type to its backend-neutral logical value type.
Definition types.hpp:127
std::remove_cvref_t< Value > type
Definition types.hpp:128
Trait for extracting the element type from a proxy reference.
Definition types.hpp:102