edu.jas.arith
Class BigRational

java.lang.Object
  extended by edu.jas.arith.BigRational
All Implemented Interfaces:
AbelianGroupElem<BigRational>, AbelianGroupFactory<BigRational>, Element<BigRational>, ElemFactory<BigRational>, GcdRingElem<BigRational>, MonoidElem<BigRational>, MonoidFactory<BigRational>, RingElem<BigRational>, RingFactory<BigRational>, java.io.Serializable, java.lang.Cloneable, java.lang.Comparable<BigRational>

public final class BigRational
extends java.lang.Object
implements GcdRingElem<BigRational>, RingFactory<BigRational>

Immutable arbitrary-precision rational numbers. BigRational class based on BigInteger implementing the RingElem interface and with the familiar SAC static method names. BigInteger is from java.math in the implementation.

Author:
Heinz Kredel
See Also:
Serialized Form

Field Summary
protected  java.math.BigInteger den
          Denominator part of the data structure.
protected  java.math.BigInteger num
          Numerator part of the data structure.
static BigRational ONE
          The Constant 1.
static BigRational ZERO
          The Constant 0.
 
Constructor Summary
  BigRational()
          Constructor for a BigRational with no arguments.
  BigRational(java.math.BigInteger n)
          Constructor for a BigRational from math.BigIntegers.
protected BigRational(java.math.BigInteger n, java.math.BigInteger d)
          Constructor for a BigRational from math.BigIntegers.
  BigRational(long n)
          Constructor for a BigRational from longs.
  BigRational(long n, long d)
          Constructor for a BigRational from longs.
  BigRational(java.lang.String s)
          Constructor for a BigRational from String.
 
Method Summary
 BigRational abs()
          Rational number absolute value.
 java.math.BigInteger characteristic()
          Characteristic of this ring.
 BigRational clone()
          Clone this.
 int compareTo(BigRational S)
          Rational number comparison.
 BigRational copy(BigRational c)
          Copy BigRational element c.
 java.math.BigInteger denominator()
          Get the denominator.
 BigRational divide(BigRational S)
          Rational number quotient.
 BigRational[] egcd(BigRational S)
          BigRational extended greatest common divisor.
 boolean equals(java.lang.Object b)
          Comparison with any other object.
 BigRational fromInteger(java.math.BigInteger a)
          Get a BigRational element from a math.BigInteger.
 BigRational fromInteger(long a)
          Get a BigRational element from a long.
 BigRational gcd(BigRational S)
          Rational number greatest common divisor.
 BigRational getONE()
          Get the one element.
 BigRational getZERO()
          Get the zero element.
 int hashCode()
          Hash code for this BigRational.
 BigRational inverse()
          Rational number inverse.
 boolean isAssociative()
          Query if this ring is associative.
 boolean isCommutative()
          Query if this ring is commutative.
 boolean isField()
          Query if this ring is a field.
 boolean isONE()
          Is BigRational one.
 boolean isUnit()
          Is BigRational unit.
 boolean isZERO()
          Is BigRational zero.
 BigRational multiply(BigRational S)
          Rational number product.
 BigRational negate()
          Rational number negative.
 java.math.BigInteger numerator()
          Get the numerator.
 BigRational parse(java.io.Reader r)
          Parse rational number from Reader.
 BigRational parse(java.lang.String s)
          Parse rational number from String.
 BigRational random(int n)
          Rational number, random.
 BigRational random(int n, java.util.Random rnd)
          Rational number, random.
 BigRational remainder(BigRational S)
          Rational number remainder.
static BigRational RNABS(BigRational R)
          Rational number absolute value.
static int RNCOMP(BigRational R, BigRational S)
          Rational number comparison.
static java.math.BigInteger RNDEN(BigRational R)
          Rational number denominator.
static BigRational RNDIF(BigRational R, BigRational S)
          Rational number difference.
static void RNDWR(BigRational R, int NL)
          Rational number decimal write.
static BigRational RNINT(java.math.BigInteger A)
          Rational number from integer.
static BigRational RNINV(BigRational R)
          Rational number inverse.
static BigRational RNNEG(BigRational R)
          Rational number negative.
static java.math.BigInteger RNNUM(BigRational R)
          Rational number numerator.
static BigRational RNPROD(BigRational R, BigRational S)
          Rational number product.
static BigRational RNQ(BigRational R, BigRational S)
          Rational number quotient.
static BigRational RNRAND(int NL)
          Rational number, random.
static BigRational RNRED(java.math.BigInteger n, java.math.BigInteger d)
          Rational number reduction to lowest terms.
static int RNSIGN(BigRational R)
          Rational number sign.
static BigRational RNSUM(BigRational R, BigRational S)
          Rational number sum.
 int signum()
          Rational number sign.
 BigRational subtract(BigRational S)
          Rational number difference.
 BigRational sum(BigRational S)
          Rational number sum.
 java.lang.String toString()
          Get the string representation.
static BigRational valueOf(java.math.BigInteger a)
          Get a BigRational element from a math.BigInteger.
static BigRational valueOf(long a)
          Get a BigRational element from a long.
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

num

protected final java.math.BigInteger num
Numerator part of the data structure.


den

protected final java.math.BigInteger den
Denominator part of the data structure.


ZERO

public static final BigRational ZERO
The Constant 0.


ONE

public static final BigRational ONE
The Constant 1.

Constructor Detail

BigRational

protected BigRational(java.math.BigInteger n,
                      java.math.BigInteger d)
Constructor for a BigRational from math.BigIntegers.

Parameters:
n - math.BigInteger.
d - math.BigInteger.

BigRational

public BigRational(java.math.BigInteger n)
Constructor for a BigRational from math.BigIntegers.

Parameters:
n - math.BigInteger.

BigRational

public BigRational(long n,
                   long d)
Constructor for a BigRational from longs.

Parameters:
n - long.
d - long.

BigRational

public BigRational(long n)
Constructor for a BigRational from longs.

Parameters:
n - long.

BigRational

public BigRational()
Constructor for a BigRational with no arguments.


BigRational

public BigRational(java.lang.String s)
            throws java.lang.NumberFormatException
Constructor for a BigRational from String.

Throws:
java.lang.NumberFormatException
Parameters:
s - String.
Method Detail

clone

public BigRational clone()
Clone this.

Specified by:
clone in interface Element<BigRational>
Overrides:
clone in class java.lang.Object
See Also:
Object.clone()
Returns:
Creates and returns a copy of this Elemnt.

copy

public BigRational copy(BigRational c)
Copy BigRational element c.

Specified by:
copy in interface ElemFactory<BigRational>
Parameters:
c - BigRational.
Returns:
a copy of c.

numerator

public java.math.BigInteger numerator()
Get the numerator.

Returns:
num.

denominator

public java.math.BigInteger denominator()
Get the denominator.

Returns:
den.

toString

public java.lang.String toString()
Get the string representation.

Overrides:
toString in class java.lang.Object
See Also:
Object.toString()

getZERO

public BigRational getZERO()
Get the zero element.

Specified by:
getZERO in interface AbelianGroupFactory<BigRational>
Returns:
0 as BigRational.

getONE

public BigRational getONE()
Get the one element.

Specified by:
getONE in interface MonoidFactory<BigRational>
Returns:
1 as BigRational.

isCommutative

public boolean isCommutative()
Query if this ring is commutative.

Specified by:
isCommutative in interface MonoidFactory<BigRational>
Returns:
true.

isAssociative

public boolean isAssociative()
Query if this ring is associative.

Specified by:
isAssociative in interface MonoidFactory<BigRational>
Returns:
true.

isField

public boolean isField()
Query if this ring is a field.

Specified by:
isField in interface RingFactory<BigRational>
Returns:
true.

characteristic

public java.math.BigInteger characteristic()
Characteristic of this ring.

Specified by:
characteristic in interface RingFactory<BigRational>
Returns:
characteristic of this ring.

fromInteger

public BigRational fromInteger(java.math.BigInteger a)
Get a BigRational element from a math.BigInteger.

Specified by:
fromInteger in interface ElemFactory<BigRational>
Parameters:
a - math.BigInteger.
Returns:
BigRational from a.

valueOf

public static BigRational valueOf(java.math.BigInteger a)
Get a BigRational element from a math.BigInteger.

Parameters:
a - math.BigInteger.
Returns:
BigRational from a.

fromInteger

public BigRational fromInteger(long a)
Get a BigRational element from a long.

Specified by:
fromInteger in interface ElemFactory<BigRational>
Parameters:
a - long.
Returns:
BigRational from a.

valueOf

public static BigRational valueOf(long a)
Get a BigRational element from a long.

Parameters:
a - long.
Returns:
BigRational from a.

isZERO

public boolean isZERO()
Is BigRational zero.

Specified by:
isZERO in interface AbelianGroupElem<BigRational>
See Also:
AbelianGroupElem.isZERO()
Returns:
If this is 0 then true is returned, else false.

isONE

public boolean isONE()
Is BigRational one.

Specified by:
isONE in interface MonoidElem<BigRational>
See Also:
MonoidElem.isONE()
Returns:
If this is 1 then true is returned, else false.

isUnit

public boolean isUnit()
Is BigRational unit.

Specified by:
isUnit in interface MonoidElem<BigRational>
See Also:
MonoidElem.isUnit()
Returns:
If this is a unit then true is returned, else false.

equals

public boolean equals(java.lang.Object b)
Comparison with any other object.

Specified by:
equals in interface Element<BigRational>
Overrides:
equals in class java.lang.Object
See Also:
Object.equals(java.lang.Object)
Returns:
true if this is equal to b, else false.

hashCode

public int hashCode()
Hash code for this BigRational.

Specified by:
hashCode in interface Element<BigRational>
Overrides:
hashCode in class java.lang.Object
See Also:
Object.hashCode()
Returns:
the hashCode.

RNRED

public static BigRational RNRED(java.math.BigInteger n,
                                java.math.BigInteger d)
Rational number reduction to lowest terms.

Parameters:
n - BigInteger.
d - BigInteger.
Returns:
a/b ~ n/d, gcd(a,b) = 1, b > 0.

abs

public BigRational abs()
Rational number absolute value.

Specified by:
abs in interface AbelianGroupElem<BigRational>
See Also:
AbelianGroupElem.abs()
Returns:
the absolute value of this.

RNABS

public static BigRational RNABS(BigRational R)
Rational number absolute value.

Parameters:
R - is a rational number.
Returns:
the absolute value of R.

compareTo

public int compareTo(BigRational S)
Rational number comparison.

Specified by:
compareTo in interface Element<BigRational>
Specified by:
compareTo in interface java.lang.Comparable<BigRational>
Parameters:
S - BigRational.
Returns:
SIGN(this-S).

RNCOMP

public static int RNCOMP(BigRational R,
                         BigRational S)
Rational number comparison.

Parameters:
R - BigRational.
S - BigRational.
Returns:
SIGN(R-S).

RNDEN

public static java.math.BigInteger RNDEN(BigRational R)
Rational number denominator.

Parameters:
R - BigRational.
Returns:
R.denominator().

subtract

public BigRational subtract(BigRational S)
Rational number difference.

Specified by:
subtract in interface AbelianGroupElem<BigRational>
Parameters:
S - BigRational.
Returns:
this-S.

RNDIF

public static BigRational RNDIF(BigRational R,
                                BigRational S)
Rational number difference.

Parameters:
R - BigRational.
S - BigRational.
Returns:
R-S.

RNDWR

public static void RNDWR(BigRational R,
                         int NL)
Rational number decimal write. R is a rational number. n is a non-negative integer. R is approximated by a decimal fraction D with n decimal digits following the decimal point and D is written in the output stream. The inaccuracy of the approximation is at most (1/2)*10**-n. If ABS(D) is greater than ABS(R) then the last digit is followed by a minus sign, if ABS(D) is less than ABS(R) then by a plus sign.

Parameters:
R -
NL -

RNINT

public static BigRational RNINT(java.math.BigInteger A)
Rational number from integer.

Parameters:
A - BigInteger.
Returns:
A/1.

inverse

public BigRational inverse()
Rational number inverse.

Specified by:
inverse in interface MonoidElem<BigRational>
See Also:
MonoidElem.inverse()
Returns:
1/this.

RNINV

public static BigRational RNINV(BigRational R)
Rational number inverse.

Parameters:
R - BigRational.
Returns:
1/R.

negate

public BigRational negate()
Rational number negative.

Specified by:
negate in interface AbelianGroupElem<BigRational>
See Also:
AbelianGroupElem.negate()
Returns:
-this.

RNNEG

public static BigRational RNNEG(BigRational R)
Rational number negative.

Parameters:
R - BigRational.
Returns:
-R.

RNNUM

public static java.math.BigInteger RNNUM(BigRational R)
Rational number numerator.

Parameters:
R - BigRational.
Returns:
R.numerator().

multiply

public BigRational multiply(BigRational S)
Rational number product.

Specified by:
multiply in interface MonoidElem<BigRational>
Parameters:
S - BigRational.
Returns:
this*S.

RNPROD

public static BigRational RNPROD(BigRational R,
                                 BigRational S)
Rational number product.

Parameters:
R - BigRational.
S - BigRational.
Returns:
R*S.

divide

public BigRational divide(BigRational S)
Rational number quotient.

Specified by:
divide in interface MonoidElem<BigRational>
Parameters:
S - BigRational.
Returns:
this/S.

RNQ

public static BigRational RNQ(BigRational R,
                              BigRational S)
Rational number quotient.

Parameters:
R - BigRational.
S - BigRational.
Returns:
R/S.

remainder

public BigRational remainder(BigRational S)
Rational number remainder.

Specified by:
remainder in interface MonoidElem<BigRational>
Parameters:
S - BigRational.
Returns:
this-(this/S)*S

random

public BigRational random(int n)
Rational number, random. Random integers A, B and a random sign s are generated using BigInteger(n,random) and random.nextBoolen(). Then R = s*A/(B+1), reduced to lowest terms.

Specified by:
random in interface ElemFactory<BigRational>
Parameters:
n - such that 0 ≤ A, B ≤ (2n-1).
Returns:
a random BigRational.

random

public BigRational random(int n,
                          java.util.Random rnd)
Rational number, random. Random integers A, B and a random sign s are generated using BigInteger(n,random) and random.nextBoolen(). Then R = s*A/(B+1), reduced to lowest terms.

Specified by:
random in interface ElemFactory<BigRational>
Parameters:
n - such that 0 ≤ A, B ≤ (2n-1).
rnd - is a source for random bits.
Returns:
a random BigRational.

RNRAND

public static BigRational RNRAND(int NL)
Rational number, random. Random integers A, B and a random sign s are generated using BigInteger(n,random) and random.nextBoolen(). Then R = s*A/(B+1), reduced to lowest terms.

Parameters:
NL - such that 0 ≤ A, B ≤ (2n-1).
Returns:
a random BigRational.

signum

public int signum()
Rational number sign.

Specified by:
signum in interface AbelianGroupElem<BigRational>
See Also:
AbelianGroupElem.signum()
Returns:
the sign of this.

RNSIGN

public static int RNSIGN(BigRational R)
Rational number sign.

Parameters:
R - BigRational.
Returns:
R.signum().

sum

public BigRational sum(BigRational S)
Rational number sum.

Specified by:
sum in interface AbelianGroupElem<BigRational>
Parameters:
S - BigRational.
Returns:
this+S.

RNSUM

public static BigRational RNSUM(BigRational R,
                                BigRational S)
Rational number sum.

Parameters:
R - BigRational.
S - BigRational.
Returns:
R+S.

parse

public BigRational parse(java.lang.String s)
Parse rational number from String.

Specified by:
parse in interface ElemFactory<BigRational>
Parameters:
s - String.
Returns:
BigRational from s.

parse

public BigRational parse(java.io.Reader r)
Parse rational number from Reader.

Specified by:
parse in interface ElemFactory<BigRational>
Parameters:
r - Reader.
Returns:
next BigRational from r.

gcd

public BigRational gcd(BigRational S)
Rational number greatest common divisor.

Specified by:
gcd in interface RingElem<BigRational>
Parameters:
S - BigRational.
Returns:
gcd(this,S).

egcd

public BigRational[] egcd(BigRational S)
BigRational extended greatest common divisor.

Specified by:
egcd in interface RingElem<BigRational>
Parameters:
S - BigRational.
Returns:
[ gcd(this,S), a, b ] with a*this + b*S = gcd(this,S).