[ 
https://issues.apache.org/jira/browse/MATH-1248?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gilles resolved MATH-1248.
--------------------------
    Resolution: Fixed

> BigFraction optimizations around object creation for ZERO values and reduce()
> -----------------------------------------------------------------------------
>
>                 Key: MATH-1248
>                 URL: https://issues.apache.org/jira/browse/MATH-1248
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 3.5
>            Reporter: Chris Popp
>            Priority: Minor
>             Fix For: 3.6
>
>         Attachments: MINIMIZEALLOCATION-MATH-1248.patch
>
>
> In many cases a BigFraction object may represent a fraction in its most 
> reduced form.  Despite this, the reduce() method doesn't bother checking 
> whether the BigFraction needs to be reduced before returning a new object.
> This is problematic because equals() calls reduce() on both operands.  This 
> means that doing a simple comparison like 
> BigFraction.ONE.equals(BigFraction.TWO) will result in two object allocations.
> Additionally, while there is a very minimal attempt at optimizing around 
> operations that take in a parameter of BigFraction.ZERO, it is somewhat 
> inconsistent and incomplete.  For example, BigFraction add(final BigFraction 
> fraction) checks to see whether the incoming fraction is zero and if so, 
> returns *this*.  Why doesn't it also check whether *this* is zero and return 
> the incoming fraction if so, avoiding an allocation?  
> This is one example, but it exists in other locations where we not only end 
> up with allocations but expensive arithmetic operations as well 
> (multiplication or exponentiation).
> At minimum I think the reduce() method should just return *this* if gcd <= 1.
> I attached a patch with the change for reduce() and some ideas for avoiding 
> object allocations, attempting to follow the patterns in BigInteger.  I 
> verified all of the tests in the commons math pass after the changes.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to