Hello Rares,

I agree with defining a new modulo compute function (or "remainder"?).
However, there also needs to be a checked version that returns an error for invalid input (e.g. division by zero).

Regards

Antoine.


Le 28/07/2021 à 13:04, Rares Vernica a écrit :
Hello,

I'm making use of the Compute Functions to do some basic arithmetic. One
operation I need to perform is the modulo, i.e., a % b. I'm debating
between two options:

1. Compute it using the available Compute Functions using a % b = a - a / b
* b, where / is the integer division. I assume that the divide compute
function between two integer arrays does integer division, right? My
concern with this approach is the overhead of using four Compute Functions.

2. Define a new Compute Function for modulo. Would something like this
suffice?

struct Modulo {
   template <typename T, typename Arg0, typename Arg1>
   static enable_if_floating_point<T> Call(KernelContext*, Arg0 left, Arg1
right, Status*) {
     return left % right;
   }}
auto modulo = MakeArithmeticFunctionNotNull<Modulo>("modulo", &div_doc);
AddDecimalBinaryKernels<Modulo>("modulo", &modulo);
DCHECK_OK(registry->AddFunction(std::move(modulo)));

Thank you,
Rares

Reply via email to