Package edu.jas.arith
Class BigRational
- java.lang.Object
-
- edu.jas.arith.BigRational
-
- All Implemented Interfaces:
Rational
,AbelianGroupElem<BigRational>
,AbelianGroupFactory<BigRational>
,Element<BigRational>
,ElemFactory<BigRational>
,GcdRingElem<BigRational>
,MonoidElem<BigRational>
,MonoidFactory<BigRational>
,RingElem<BigRational>
,RingFactory<BigRational>
,java.io.Serializable
,java.lang.Comparable<BigRational>
,java.lang.Iterable<BigRational>
public final class BigRational extends java.lang.Object implements GcdRingElem<BigRational>, RingFactory<BigRational>, Rational, java.lang.Iterable<BigRational>
Immutable arbitrary-precision rational numbers. BigRational class based on BigInteger and implementing the RingElem interface. BigInteger is from java.math in the implementation. The SAC2 static methods are also provided.- Author:
- Heinz Kredel
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description java.math.BigInteger
den
Denominator part of the data structure.static BigRational
HALF
The Constant 1/2.java.math.BigInteger
num
Numerator part of the data structure.static BigRational
ONE
The Constant 1.static BigRational
ZERO
The Constant 0.
-
Constructor Summary
Constructors Modifier Constructor Description BigRational()
Constructor for a BigRational with no arguments.BigRational(long n)
Constructor for a BigRational from longs.BigRational(long n, long d)
Constructor for a BigRational from longs.BigRational(BigInteger n)
Constructor for a BigRational from jas.arith.BigIntegers.BigRational(BigInteger n, BigInteger d)
Constructor for a BigRational from jas.arith.BigIntegers.BigRational(java.lang.String s)
Constructor for a BigRational from String.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.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description BigRational
abs()
Rational number absolute value.long
bitLength()
Returns the number of bits in the representation of this BigRational, including a sign bit.java.math.BigInteger
ceil()
BigRational ceiling.java.math.BigInteger
characteristic()
Characteristic of this ring.int
compareTo(BigRational S)
Rational number comparison.BigRational
copy()
Clone this.BigRational
copy(BigRational c)
Copy BigRational element c.java.math.BigInteger
denominator()
Get the denominator.BigRational
divide(BigRational S)
Rational number quotient.double
doubleValue()
Get this as a double.BigRational[]
egcd(BigRational S)
BigRational extended greatest common divisor.boolean
equals(java.lang.Object b)
Comparison with any other object.BigRational
factory()
Get the corresponding element factory.java.math.BigInteger
floor()
BigRational floor.BigRational
fromInteger(long a)
Get a BigRational element from a long.BigRational
fromInteger(BigInteger a)
Get a BigRational element from a arith.BigInteger.BigRational
fromInteger(java.math.BigInteger a)
Get a BigRational element from a math.BigInteger.BigRational
gcd(BigRational S)
Rational number greatest common divisor.java.util.List<BigRational>
generators()
Get a list of the generating elements.BigDecimal
getDecimal()
Get the decimal representation.BigRational
getONE()
Get the one element.BigRational
getRational()
Return a BigRational approximation of this 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
isEntier()
Is BigRational entier.boolean
isField()
Query if this ring is a field.boolean
isFinite()
Is this structure finite or infinite.boolean
isONE()
Is BigRational one.boolean
isUnit()
Is BigRational unit.boolean
isZERO()
Is BigRational zero.java.util.Iterator<BigRational>
iterator()
Get a BigRational iterator.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[]
quotientRemainder(BigRational S)
Quotient and remainder by division of this by S.BigRational
random(int n)
Rational number, random.BigRational
random(int n, java.util.Random rnd)
Rational number, random.static BigRational
reduction(java.math.BigInteger n, java.math.BigInteger d)
Rational number reduction to lowest terms.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.void
setAllIterator()
Set the iteration algorithm to all elements.void
setDuplicatesIterator()
Set the iteration algorithm to allow duplicate elements.void
setNoDuplicatesIterator()
Set the iteration algorithm to no duplicate elements.void
setNonNegativeIterator()
Set the iteration algorithm to non-negative elements.int
signum()
Rational number sign.BigRational
subtract(BigRational S)
Rational number difference.BigRational
sum(BigRational S)
Rational number sum.java.lang.String
toScript()
Get a scripting compatible string representation.java.lang.String
toScriptFactory()
Get a scripting compatible string representation of the factory.java.lang.String
toString()
Get the string representation.java.lang.String
toString(int n)
Get the decimal string representation with given precision.java.util.Iterator<BigRational>
uniqueIterator()
Get a BigRational iterator with no duplicates.static BigRational
valueOf(long a)
Get a BigRational element from a long.static BigRational
valueOf(java.math.BigInteger a)
Get a BigRational element from a math.BigInteger.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface edu.jas.structure.ElemFactory
valueOf
-
Methods inherited from interface edu.jas.structure.MonoidElem
leftDivide, leftRemainder, power, rightDivide, rightRemainder, twosidedDivide, twosidedRemainder
-
-
-
-
Field Detail
-
num
public final java.math.BigInteger num
Numerator part of the data structure.
-
den
public 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.
-
HALF
public static final BigRational HALF
The Constant 1/2.
-
-
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(BigInteger n)
Constructor for a BigRational from jas.arith.BigIntegers.- Parameters:
n
- edu.jas.arith.BigInteger.
-
BigRational
public BigRational(BigInteger n, BigInteger d)
Constructor for a BigRational from jas.arith.BigIntegers.- Parameters:
n
- edu.jas.arith.BigInteger.d
- edu.jas.arith.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.- Parameters:
s
- String.- Throws:
java.lang.NumberFormatException
-
-
Method Detail
-
factory
public BigRational factory()
Get the corresponding element factory.- Specified by:
factory
in interfaceElement<BigRational>
- Returns:
- factory for this Element.
- See Also:
Element.factory()
-
generators
public java.util.List<BigRational> generators()
Get a list of the generating elements.- Specified by:
generators
in interfaceElemFactory<BigRational>
- Returns:
- list of generators for the algebraic structure.
- See Also:
ElemFactory.generators()
-
isFinite
public boolean isFinite()
Is this structure finite or infinite.- Specified by:
isFinite
in interfaceElemFactory<BigRational>
- Returns:
- true if this structure is finite, else false.
- See Also:
ElemFactory.isFinite()
-
copy
public BigRational copy()
Clone this.- Specified by:
copy
in interfaceElement<BigRational>
- Returns:
- Creates and returns a copy of this Element.
- See Also:
Object.clone()
-
copy
public BigRational copy(BigRational c)
Copy BigRational element c.- Specified by:
copy
in interfaceElemFactory<BigRational>
- Parameters:
c
- BigRational.- Returns:
- a copy of c.
-
getRational
public BigRational getRational()
Return a BigRational approximation of this Element.- Specified by:
getRational
in interfaceRational
- Returns:
- a BigRational approximation of this.
- See Also:
Rational.getRational()
-
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 classjava.lang.Object
- See Also:
Object.toString()
-
toString
public java.lang.String toString(int n)
Get the decimal string representation with given precision.- Parameters:
n
- precision.- Returns:
- decimal approximation.
-
getDecimal
public BigDecimal getDecimal()
Get the decimal representation.- Returns:
- decimal.
-
doubleValue
public double doubleValue()
Get this as a double.- Returns:
- this as a double
- See Also:
Number.doubleValue()
-
toScript
public java.lang.String toScript()
Get a scripting compatible string representation.- Specified by:
toScript
in interfaceElement<BigRational>
- Specified by:
toScript
in interfaceElemFactory<BigRational>
- Returns:
- script compatible representation for this Element.
- See Also:
Element.toScript()
-
toScriptFactory
public java.lang.String toScriptFactory()
Get a scripting compatible string representation of the factory.- Specified by:
toScriptFactory
in interfaceElement<BigRational>
- Returns:
- script compatible representation for this ElemFactory.
- See Also:
Element.toScriptFactory()
-
getZERO
public BigRational getZERO()
Get the zero element.- Specified by:
getZERO
in interfaceAbelianGroupFactory<BigRational>
- Returns:
- 0 as BigRational.
-
getONE
public BigRational getONE()
Get the one element.- Specified by:
getONE
in interfaceMonoidFactory<BigRational>
- Returns:
- 1 as BigRational.
-
isCommutative
public boolean isCommutative()
Query if this ring is commutative.- Specified by:
isCommutative
in interfaceMonoidFactory<BigRational>
- Returns:
- true.
-
isAssociative
public boolean isAssociative()
Query if this ring is associative.- Specified by:
isAssociative
in interfaceMonoidFactory<BigRational>
- Returns:
- true.
-
isField
public boolean isField()
Query if this ring is a field.- Specified by:
isField
in interfaceRingFactory<BigRational>
- Returns:
- true.
-
characteristic
public java.math.BigInteger characteristic()
Characteristic of this ring.- Specified by:
characteristic
in interfaceRingFactory<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 interfaceElemFactory<BigRational>
- Parameters:
a
- math.BigInteger.- Returns:
- BigRational from a.
-
fromInteger
public BigRational fromInteger(BigInteger a)
Get a BigRational element from a arith.BigInteger.- Parameters:
a
- arith.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 interfaceElemFactory<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 interfaceAbelianGroupElem<BigRational>
- Returns:
- If this is 0 then true is returned, else false.
- See Also:
AbelianGroupElem.isZERO()
-
isONE
public boolean isONE()
Is BigRational one.- Specified by:
isONE
in interfaceMonoidElem<BigRational>
- Returns:
- If this is 1 then true is returned, else false.
- See Also:
MonoidElem.isONE()
-
isUnit
public boolean isUnit()
Is BigRational unit.- Specified by:
isUnit
in interfaceMonoidElem<BigRational>
- Returns:
- If this is a unit then true is returned, else false.
- See Also:
MonoidElem.isUnit()
-
isEntier
public boolean isEntier()
Is BigRational entier.- Returns:
- If this is an integer then true is returned, else false.
-
equals
public boolean equals(java.lang.Object b)
Comparison with any other object.- Specified by:
equals
in interfaceElement<BigRational>
- Overrides:
equals
in classjava.lang.Object
- Returns:
- true if this is equal to b, else false.
- See Also:
Object.equals(java.lang.Object)
-
hashCode
public int hashCode()
Hash code for this BigRational.- Specified by:
hashCode
in interfaceElement<BigRational>
- Overrides:
hashCode
in classjava.lang.Object
- Returns:
- the hashCode.
- See Also:
Object.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.
-
reduction
public static BigRational reduction(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 interfaceAbelianGroupElem<BigRational>
- Returns:
- the absolute value of this.
- See Also:
AbelianGroupElem.abs()
-
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 interfacejava.lang.Comparable<BigRational>
- Specified by:
compareTo
in interfaceElement<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 interfaceAbelianGroupElem<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.- 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 interfaceMonoidElem<BigRational>
- Returns:
- 1/this.
- See Also:
MonoidElem.inverse()
-
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 interfaceAbelianGroupElem<BigRational>
- Returns:
- -this.
- See Also:
AbelianGroupElem.negate()
-
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 interfaceMonoidElem<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 interfaceMonoidElem<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 interfaceMonoidElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this-(this/S)*S
-
quotientRemainder
public BigRational[] quotientRemainder(BigRational S)
Quotient and remainder by division of this by S.- Specified by:
quotientRemainder
in interfaceMonoidElem<BigRational>
- Parameters:
S
- a rational number- Returns:
- [this/S, 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 interfaceElemFactory<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 interfaceElemFactory<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 interfaceAbelianGroupElem<BigRational>
- Returns:
- the sign of this.
- See Also:
AbelianGroupElem.signum()
-
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 interfaceAbelianGroupElem<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 interfaceElemFactory<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 interfaceElemFactory<BigRational>
- Parameters:
r
- Reader.- Returns:
- next BigRational from r.
-
gcd
public BigRational gcd(BigRational S)
Rational number greatest common divisor.- Specified by:
gcd
in interfaceRingElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- gcd(this,S).
-
egcd
public BigRational[] egcd(BigRational S)
BigRational extended greatest common divisor.- Specified by:
egcd
in interfaceRingElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- [ gcd(this,S), a, b ] with a*this + b*S = gcd(this,S).
-
ceil
public java.math.BigInteger ceil()
BigRational ceiling.- Returns:
- ceiling of this.
-
floor
public java.math.BigInteger floor()
BigRational floor.- Returns:
- floor of this.
-
bitLength
public long bitLength()
Returns the number of bits in the representation of this BigRational, including a sign bit. For positive BigRational, this is equivalent tonum.bitLength()+den.bitLength()
.)- Returns:
- number of bits in the representation of this BigRational, including a sign bit.
-
setAllIterator
public void setAllIterator()
Set the iteration algorithm to all elements.
-
setNonNegativeIterator
public void setNonNegativeIterator()
Set the iteration algorithm to non-negative elements.
-
setNoDuplicatesIterator
public void setNoDuplicatesIterator()
Set the iteration algorithm to no duplicate elements.
-
setDuplicatesIterator
public void setDuplicatesIterator()
Set the iteration algorithm to allow duplicate elements.
-
iterator
public java.util.Iterator<BigRational> iterator()
Get a BigRational iterator.- Specified by:
iterator
in interfacejava.lang.Iterable<BigRational>
- Returns:
- a iterator over all rationals.
-
uniqueIterator
public java.util.Iterator<BigRational> uniqueIterator()
Get a BigRational iterator with no duplicates.- Returns:
- a iterator over all rationals without duplicates.
-
-