[ 
https://issues.apache.org/jira/browse/LANG-662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12968469#action_12968469
 ] 

Christian Semrau commented on LANG-662:
---------------------------------------

The current implementation:

{code:title=Fraction.java|borderStyle=solid}
    private static int greatestCommonDivisor(int u, int v) {
        //if either op. is abs 0 or 1, return 1:
        if (Math.abs(u) <= 1 || Math.abs(v) <= 1) {
            return 1;
        }
{code} 

The case u==0 || v==0 is already handled at the calling site (). So you might 
switch to testing for abs==1 only:

{code:title=Fraction.java|borderStyle=solid}
    private static int greatestCommonDivisor(int u, int v) {
        // the case u==0 || v==0 is handled by the caller.
        // if either op. is abs 1, return 1:
        if (Math.abs(u) == 1 || Math.abs(v) == 1) {
            return 1;
        }
{code} 

Dropping this test altogether does not change correctness, but might influence 
performance. If you expect many fractions with numerator 1 or denominator 1, 
keep the test.


> org.apache.commons.lang3.math.Fraction does not reduce (Integer.MIN_VALUE, 
> 2^k)
> -------------------------------------------------------------------------------
>
>                 Key: LANG-662
>                 URL: https://issues.apache.org/jira/browse/LANG-662
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.math.*
>    Affects Versions: 3.0
>            Reporter: Christian Semrau
>            Priority: Minor
>
> The greatestCommonDivisor method in class Fraction does not find the gcd of 
> Integer.MIN_VALUE and 2^k, and this case can be triggered by taking 
> Integer.MIN_VALUE as the numerator. Note that the case of taking 
> Integer.MIN_VALUE as the denominator is handled explicitly in the 
> getReducedFraction factory method.
> {code:title=FractionTest.java|borderStyle=solid}
>       // additional test cases
>       public void testReducedFactory_int_int() {
>               // ...
>               f = Fraction.getReducedFraction(Integer.MIN_VALUE, 2);
>               assertEquals(Integer.MIN_VALUE / 2, f.getNumerator());
>               assertEquals(1, f.getDenominator());
>       public void testReduce() {
>               // ...
>               f = Fraction.getFraction(Integer.MIN_VALUE, 2);
>               result = f.reduce();
>               assertEquals(Integer.MIN_VALUE / 2, result.getNumerator());
>               assertEquals(1, result.getDenominator());
> {code} 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to