35 const Shape &unextended_input2_shape,
const T *input2_data,
36 const Shape &unextended_output_shape, T *output_data)
40 float operator()(
const float lhs,
const float rhs)
const {
return std::fmod(lhs, rhs); }
44 throw std::runtime_error(std::string(
"cker::FloorModBroadcast: Unsupported rank size : ") +
64 auto in1_val = input1_data[in1_idx];
65 auto in2_val = input2_data[in2_idx];
68 if constexpr (std::is_integral_v<T>)
70 trunc_mod = std::modulus<T>()(in1_val, in2_val);
74 trunc_mod = FloatMod{}(in1_val, in2_val);
76 output_data[out_idx] = (trunc_mod != 0) && ((in2_val < 0) != (trunc_mod < 0))
77 ? (trunc_mod + in2_val)
90 for (
int t = 0; t < num_elements; t++)
92 T in1_val = input1_data[t];
93 T in2_val = input2_data[t];
95 if constexpr (std::is_integral_v<T>)
97 trunc_mod = std::modulus<T>()(in1_val, in2_val);
101 trunc_mod = std::fmod(in1_val, in2_val);
104 (trunc_mod != 0) && ((in2_val < 0) != (trunc_mod < 0)) ? (trunc_mod + in2_val) : trunc_mod;
void FloorModBroadcast(const Shape &unextended_input1_shape, const T *input1_data, const Shape &unextended_input2_shape, const T *input2_data, const Shape &unextended_output_shape, T *output_data)