Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
tensor/precision.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "basic_tensor.hpp"
4
5namespace uni20
6{
8template <TensorView Input> [[nodiscard]] constexpr Precision precision_of(Input const& input)
9{
11 if constexpr (has_runtime_precision_v<S>)
12 {
13 if constexpr (requires { input.default_precision(); })
14 return input.default_precision();
15 else
16 throw std::logic_error("tensor: no default working precision was supplied");
17 }
18 else
19 return native_precision<S>();
20}
21
25template <TensorView Input> [[nodiscard]] auto at_precision(Input const& input, Precision p)
26{
28 require_precision<S>(p);
29 auto result = Tensor(input);
30 if constexpr (has_runtime_precision_v<S>)
31 {
32 result.default_precision(p);
33 for (auto& value : result.storage())
34 value = value.at(p);
35 }
36 return result;
37}
38
43template <TensorView A, TensorView B> [[nodiscard]] constexpr Precision common_default_precision(A const& a, B const& b)
44{
46}
47} // namespace uni20
Owning tensor implementation and configurable extents alias.
Exact arithmetic or an explicit binary working precision.
Definition core/precision.hpp:13
General-purpose owning tensor with immediate or deferred mdspan metadata.
Definition basic_tensor.hpp:109
locale_t value
Definition data_table.cpp:49
Definition data_table.cpp:8
Definition async/async.hpp:26
auto at_precision(Input const &input, Precision p)
Materialize an owning tensor with every element converted to p.
Definition tensor/precision.hpp:25
constexpr Precision precision_of(T const &value)
Read scalar precision without changing any scalar or provider state.
Definition runtime_precision.hpp:53
constexpr Precision common_precision(Precision a, Precision b)
Combine precisions, treating exact values as neutral and rejecting unequal finite precisions.
Definition core/precision.hpp:57
constexpr Precision common_default_precision(A const &a, B const &b)
Select a binary operation's default without inspecting element precisions.
Definition tensor/precision.hpp:43
std::remove_cv_t< typename tensor_mdspec_t< T >::element_type > tensor_element_t
Scalar value type exposed by a tensor-level object.
Definition tensor/concepts.hpp:126