Hi Stephen, On Sep 29, 2015, at 3:49 AM, Stephen Colebourne <scolebou...@joda.org> wrote:
> Good to see this happen. Glad to hear it. > I agree a test would be good to demonstrate edge cases. I’ll add something. > 1) > I think the code for floorMod(long x, int y); cannot actually > overflow. As such, the result could just be cast without the if and > throw. I’ll investigate further. > 2) > My preferred algorithm for floorMod is: > > return ((a % b) + b) % b; > > as it contains no Java-side branches, although tests would be needed > to prove performance. > > This also allows an algorithm for floorDiv with no Java-side branches: > > int mod = ((a % b) + b) % b; > return (a - mod) / b; I tested the code which was in the original issue description and found some discrepancies. I’ll need to revisit this to see what happened. > > 3) > While making changes, this code could be changed to avoid the local > variable (just return): > public static int floorMod(int x, int y) { > int r = x - floorDiv(x, y) * y; > return r; > } I agree. I saw that myself but left it as-is. Thanks, Brian