Hi Rares, We have an open Jira issue for this at https://issues.apache.org/jira/browse/ARROW-12755, and some other related issues linked from it. Please comment there if you have suggestions for the implementation.
Thank you, Ian On Wed, Jul 28, 2021 at 7:15 AM Antoine Pitrou <anto...@python.org> wrote: > > > 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 > >