I’m looking for a Java library which represents fractions (rational numbers). For example, if I want to store the fraction 1/3
then it will not be saved as 0.33333
which will lose its accuracy.
Here is some of the functionality I expect finding in such a library:
getNumerator()
getDenominator()
add(Rational r1, Rational r2)
,subtract(Rational r1, Rational r2)
,multiply(Rational r1, Rational r2)
,divide(Rational r1, Rational r2)
isProper()
getCommonDenominator(Collection<Rational> rationals)
getSimplified()
I can implement such a library by myself, though I was wondering whether something similar already exists.
EDIT: It would also be nice if the library implements (in addition to the above) some number theory algorithms, such as getEgyptianFractionsSum()
etc.
Advertisement
Answer
The JScience
library includes the class org.jscience.mathematics.number.Rational
. In addition to the usual factories, accessors and operations, one can construct other useful entities, including Polynomial<Rational>
, Vector<Rational>
and Matrix<Rational>
.
As an example, a function to obtain the lowest common denominator of a collection of fractions might look like this:
private static LargeInteger lcd(Collection<Rational> fractions) { Rational sum = Rational.ZERO; for (Rational rational : fractions) { sum = sum.plus(rational); } return sum.getDivisor(); }
The following statement prints 6
:
System.out.println(lcd(Arrays.asList( Rational.valueOf(1, 2), Rational.valueOf(1, 3))));