Hi Allison,

Le 2013-06-20 12:54, Allison, Timothy B. a écrit :
I'm getting an overflow exception when I try to create a fraction
with a maxDenominator from a double that is very close to a simple
fraction.  For example:

double d = 0.5000000001;
Fraction f = new Fraction(d, 10);

According to https://issues.apache.org/jira/browse/MATH-181, there
are two separate use cases: one for a user-specified epsilon (in which
case maxDenominator is set to Integer.MAX_VALUE), and one for a
user-specified maxDenominator (in which case, epsilon is set to 0.0f).

If I add a check for whether q2 is > maxDenominator before the
potential overflow throw, I no longer have the problem mentioned
above. The overflow throw, I think, is designed for the user-defined
epsilon use case, not the maxDenominator use case.

Is this a reasonable fix?  Should I submit a patch?

Yes, this is a reasonable fix. Could you open a JIRA issue and attache your patch
including a test case?

Thanks a lot
Luc


            double r1 = 1.0 / (r0 - a0);
            long a1 = (long)FastMath.floor(r1);
            p2 = (a1 * p1) + p0;
            q2 = (a1 * q1) + q0;

            if (q2 >= maxDenominator){
               this.numerator = (int) p1;
               this.denominator = (int) q1;
               return;
            }
            if ((FastMath.abs(p2) > overflow) || (FastMath.abs(q2) >
overflow)) {
                throw new FractionConversionException(value, p2, q2);
            }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to