[9] RFR of 8023217: Additional floorDiv/floorMod/multiplyExact methods for java.lang.Math
Stephen Colebourne
scolebourne at joda.org
Tue Sep 29 10:49:23 UTC 2015
Good to see this happen.
I agree a test would be good to demonstrate edge cases.
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.
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;
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;
}
Stephen
On 29 September 2015 at 03:17, Joseph D. Darcy <joe.darcy at oracle.com> wrote:
> Hi Brian,
>
> Do you think any tests are needed here, at least for a quick sanity check?
>
> Thanks,
>
> -Joe
>
>
> On 9/28/2015 6:06 PM, Brian Burkhalter wrote:
>>
>> Please review at your convenience.
>>
>> Issue: https://bugs.openjdk.java.net/browse/JDK-8023217
>> Patch: http://cr.openjdk.java.net/~bpb/8023217/webrev.00/
>>
>> Summary:
>> Add some additional methods of the same name as existing methods but with
>> the commonly used parameter signature “long,int”:
>>
>> long multiplyExact(long,int)
>> long floorDiv(long,int)
>> int floorDiv(long,int)
>>
>> These methods also provide hooks for potential intrinsics. There might be
>> room for improvement in their Java implementations.
>>
>> The modifications to the java.time classes are to fix warnings about
>> “redundant cast to int.”
>>
>> Thanks,
>>
>> Brian
>
>
More information about the core-libs-dev
mailing list