5#include <metal_integer>
43 metal::enable_if_t<metal::is_integral_v<T> & !metal::is_signed_v<T>, T>
48 metal::enable_if_t<metal::is_integral_v<T> & metal::is_signed_v<T>, T>
51 if (r != 0 && (r < 0 != y < 0)) {
57 metal::enable_if_t<!metal::is_integral_v<T>, T>
operator()(T x, T y) {
59 if (r != 0 && (r < 0 != y < 0)) {
100 template <
typename T>
107 template <
typename T>
114 template <
typename T>
121 template <
typename T>
124 return metal::numeric_limits<T>::quiet_NaN();
126 constexpr T inf = metal::numeric_limits<T>::infinity();
129 return (minval == -inf || maxval == inf)
136 template <
typename T>
137 metal::enable_if_t<metal::is_integral_v<T>, T>
operator()(T x, T y) {
141 template <
typename T>
142 metal::enable_if_t<!metal::is_integral_v<T>, T>
operator()(T x, T y) {
146 return x > y ? x : y;
154 return x > y ? x : y;
159 template <
typename T>
160 metal::enable_if_t<metal::is_integral_v<T>, T>
operator()(T x, T y) {
164 template <
typename T>
165 metal::enable_if_t<!metal::is_integral_v<T>, T>
operator()(T x, T y) {
169 return x < y ? x : y;
177 return x < y ? x : y;
182 template <
typename T>
189 template <
typename T>
200 template <
typename T>
201 metal::enable_if_t<!metal::is_integral_v<T>, T>
operator()(T base, T exp) {
205 template <
typename T>
206 metal::enable_if_t<metal::is_integral_v<T>, T>
operator()(T base, T exp) {
223 auto phase = y.
imag * x_ln_r + y.
real * x_theta;
229 template <
typename T>
236 template <
typename T>
243 template <
typename T>
250 template <
typename T>
257 template <
typename T>
264 template <
typename T>
271 template <
typename T>
278 template <
typename T>
285 template <
typename T>
292 template <
typename T>
Definition binary_ops.h:8
T operator()(T x, T y)
Definition binary_ops.h:10
Definition binary_ops.h:284
T operator()(T y, T x)
Definition binary_ops.h:286
Definition binary_ops.h:249
T operator()(T x, T y)
Definition binary_ops.h:251
Definition binary_ops.h:256
T operator()(T x, T y)
Definition binary_ops.h:258
Definition binary_ops.h:263
T operator()(T x, T y)
Definition binary_ops.h:265
Definition binary_ops.h:291
metal::array< T, 2 > operator()(T x, T y)
Definition binary_ops.h:293
Definition binary_ops.h:34
T operator()(T x, T y)
Definition binary_ops.h:36
Definition binary_ops.h:70
bool operator()(T x, T y)
Definition binary_ops.h:72
Definition binary_ops.h:15
T operator()(T x, T y)
Definition binary_ops.h:17
bfloat16_t operator()(bfloat16_t x, bfloat16_t y)
Definition binary_ops.h:29
half operator()(half x, half y)
Definition binary_ops.h:25
float operator()(float x, float y)
Definition binary_ops.h:21
Definition binary_ops.h:99
bool operator()(T x, T y)
Definition binary_ops.h:101
Definition binary_ops.h:92
bool operator()(T x, T y)
Definition binary_ops.h:94
Definition binary_ops.h:270
T operator()(T x, T y)
Definition binary_ops.h:272
Definition binary_ops.h:113
bool operator()(T x, T y)
Definition binary_ops.h:115
Definition binary_ops.h:106
bool operator()(T x, T y)
Definition binary_ops.h:108
Definition binary_ops.h:120
T operator()(T x, T y)
Definition binary_ops.h:122
Definition binary_ops.h:235
T operator()(T x, T y)
Definition binary_ops.h:237
Definition binary_ops.h:242
T operator()(T x, T y)
Definition binary_ops.h:244
Definition binary_ops.h:135
metal::enable_if_t<!metal::is_integral_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:142
metal::enable_if_t< metal::is_integral_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:137
complex64_t operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:150
Definition binary_ops.h:158
metal::enable_if_t<!metal::is_integral_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:165
complex64_t operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:173
metal::enable_if_t< metal::is_integral_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:160
Definition binary_ops.h:181
T operator()(T x, T y)
Definition binary_ops.h:183
Definition binary_ops.h:77
bool operator()(T x, T y)
Definition binary_ops.h:79
bool operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:83
Definition binary_ops.h:188
bool operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:194
bool operator()(T x, T y)
Definition binary_ops.h:190
Definition binary_ops.h:199
complex64_t operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:219
metal::enable_if_t<!metal::is_integral_v< T >, T > operator()(T base, T exp)
Definition binary_ops.h:201
metal::enable_if_t< metal::is_integral_v< T >, T > operator()(T base, T exp)
Definition binary_ops.h:206
Definition binary_ops.h:41
metal::enable_if_t< metal::is_integral_v< T > &metal::is_signed_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:49
metal::enable_if_t<!metal::is_integral_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:57
metal::enable_if_t< metal::is_integral_v< T > &!metal::is_signed_v< T >, T > operator()(T x, T y)
Definition binary_ops.h:44
complex64_t operator()(complex64_t x, complex64_t y)
Definition binary_ops.h:65
Definition binary_ops.h:277
T operator()(T x, T y)
Definition binary_ops.h:279
Definition binary_ops.h:228
T operator()(T x, T y)
Definition binary_ops.h:230
float imag
Definition complex.h:22
float real
Definition complex.h:21