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>
,Serializable
,Comparable<BigRational>
,Iterable<BigRational>
public final class BigRational
extends Object
implements GcdRingElem<BigRational>, RingFactory<BigRational>, Rational, 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.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal BigInteger
Denominator part of the data structure.private boolean
static final BigRational
The Constant 1/2.private boolean
final BigInteger
Numerator part of the data structure.static final BigRational
The Constant 1.private static final Random
static final BigRational
The Constant 0. -
Constructor Summary
ConstructorsModifierConstructorDescriptionConstructor 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.Constructor for a BigRational from jas.arith.BigIntegers.BigRational
(BigInteger n, BigInteger d) Constructor for a BigRational from jas.arith.BigIntegers.Constructor for a BigRational from String.Constructor for a BigRational from math.BigIntegers.protected
BigRational
(BigInteger n, BigInteger d) Constructor for a BigRational from math.BigIntegers. -
Method Summary
Modifier and TypeMethodDescriptionabs()
Rational number absolute value.long
Returns the number of bits in the representation of this BigRational, including a sign bit.ceil()
BigRational ceiling.Characteristic of this ring.int
Rational number comparison.copy()
Clone this.copy
(BigRational c) Copy BigRational element c.Get the denominator.Rational number quotient.double
Get this as a double.egcd
(BigRational S) BigRational extended greatest common divisor.boolean
Comparison with any other object.factory()
Get the corresponding element factory.floor()
BigRational floor.fromInteger
(long a) Get a BigRational element from a long.Get a BigRational element from a arith.BigInteger.Get a BigRational element from a math.BigInteger.gcd
(BigRational S) Rational number greatest common divisor.Get a list of the generating elements.Get the decimal representation.getONE()
Get the one element.Return a BigRational approximation of this Element.getZERO()
Get the zero element.int
hashCode()
Hash code for this BigRational.inverse()
Rational number inverse.boolean
Query if this ring is associative.boolean
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.iterator()
Get a BigRational iterator.Rational number product.negate()
Rational number negative.Get the numerator.Parse rational number from Reader.Parse rational number from String.Quotient and remainder by division of this by S.random
(int n) Rational number, random.Rational number, random.static BigRational
reduction
(BigInteger n, BigInteger d) Rational number reduction to lowest terms.Rational number remainder.static BigRational
RNABS
(BigRational R) Rational number absolute value.static int
RNCOMP
(BigRational R, BigRational S) Rational number comparison.static 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
(BigInteger A) Rational number from integer.static BigRational
RNINV
(BigRational R) Rational number inverse.static BigRational
RNNEG
(BigRational R) Rational number negative.static 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
(BigInteger n, BigInteger d) Rational number reduction to lowest terms.static int
Rational number sign.static BigRational
RNSUM
(BigRational R, BigRational S) Rational number sum.void
Set the iteration algorithm to all elements.void
Set the iteration algorithm to allow duplicate elements.void
Set the iteration algorithm to no duplicate elements.void
Set the iteration algorithm to non-negative elements.int
signum()
Rational number sign.Rational number difference.sum
(BigRational S) Rational number sum.toScript()
Get a scripting compatible string representation.Get a scripting compatible string representation of the factory.toString()
Get the string representation.toString
(int n) Get the decimal string representation with given precision.Get a BigRational iterator with no duplicates.static BigRational
valueOf
(long a) Get a BigRational element from a long.static BigRational
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 java.lang.Iterable
forEach, spliterator
Methods inherited from interface edu.jas.structure.MonoidElem
leftDivide, leftRemainder, power, rightDivide, rightRemainder, twosidedDivide, twosidedRemainder
-
Field Details
-
num
Numerator part of the data structure. -
den
Denominator part of the data structure. -
ZERO
The Constant 0. -
ONE
The Constant 1. -
HALF
The Constant 1/2. -
random
-
nonNegative
private boolean nonNegative -
duplicates
private boolean duplicates
-
-
Constructor Details
-
BigRational
Constructor for a BigRational from math.BigIntegers.- Parameters:
n
- math.BigInteger.d
- math.BigInteger.
-
BigRational
Constructor for a BigRational from math.BigIntegers.- Parameters:
n
- math.BigInteger.
-
BigRational
Constructor for a BigRational from jas.arith.BigIntegers.- Parameters:
n
- edu.jas.arith.BigInteger.
-
BigRational
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
Constructor for a BigRational from String.- Parameters:
s
- String.- Throws:
NumberFormatException
-
-
Method Details
-
factory
Get the corresponding element factory.- Specified by:
factory
in interfaceElement<BigRational>
- Returns:
- factory for this Element.
- See Also:
-
generators
Get a list of the generating elements.- Specified by:
generators
in interfaceElemFactory<BigRational>
- Returns:
- list of generators for the algebraic structure.
- See Also:
-
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:
-
copy
Clone this.- Specified by:
copy
in interfaceElement<BigRational>
- Returns:
- Creates and returns a copy of this Element.
- See Also:
-
copy
Copy BigRational element c.- Specified by:
copy
in interfaceElemFactory<BigRational>
- Parameters:
c
- BigRational.- Returns:
- a copy of c.
-
getRational
Return a BigRational approximation of this Element.- Specified by:
getRational
in interfaceRational
- Returns:
- a BigRational approximation of this.
- See Also:
-
numerator
Get the numerator.- Returns:
- num.
-
denominator
Get the denominator.- Returns:
- den.
-
toString
Get the string representation. -
toString
Get the decimal string representation with given precision.- Parameters:
n
- precision.- Returns:
- decimal approximation.
-
getDecimal
Get the decimal representation.- Returns:
- decimal.
-
doubleValue
public double doubleValue()Get this as a double.- Returns:
- this as a double
- See Also:
-
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:
-
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:
-
getZERO
Get the zero element.- Specified by:
getZERO
in interfaceAbelianGroupFactory<BigRational>
- Returns:
- 0 as 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
Characteristic of this ring.- Specified by:
characteristic
in interfaceRingFactory<BigRational>
- Returns:
- characteristic of this ring.
-
fromInteger
Get a BigRational element from a math.BigInteger.- Specified by:
fromInteger
in interfaceElemFactory<BigRational>
- Parameters:
a
- math.BigInteger.- Returns:
- BigRational from a.
-
fromInteger
Get a BigRational element from a arith.BigInteger.- Parameters:
a
- arith.BigInteger.- Returns:
- BigRational from a.
-
valueOf
Get a BigRational element from a math.BigInteger.- Parameters:
a
- math.BigInteger.- Returns:
- BigRational from a.
-
fromInteger
Get a BigRational element from a long.- Specified by:
fromInteger
in interfaceElemFactory<BigRational>
- Parameters:
a
- long.- Returns:
- BigRational from a.
-
valueOf
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:
-
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:
-
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:
-
isEntier
public boolean isEntier()Is BigRational entier.- Returns:
- If this is an integer then true is returned, else false.
-
equals
Comparison with any other object.- Specified by:
equals
in interfaceElement<BigRational>
- Overrides:
equals
in classObject
- Parameters:
b
-- Returns:
- true if this is equal to b, else false.
- See Also:
-
hashCode
public int hashCode()Hash code for this BigRational.- Specified by:
hashCode
in interfaceElement<BigRational>
- Overrides:
hashCode
in classObject
- Returns:
- the hashCode.
- See Also:
-
RNRED
Rational number reduction to lowest terms.- Parameters:
n
- BigInteger.d
- BigInteger.- Returns:
- a/b ~ n/d, gcd(a,b) = 1, b > 0.
-
reduction
Rational number reduction to lowest terms.- Parameters:
n
- BigInteger.d
- BigInteger.- Returns:
- a/b ~ n/d, gcd(a,b) = 1, b > 0.
-
abs
Rational number absolute value.- Specified by:
abs
in interfaceAbelianGroupElem<BigRational>
- Returns:
- the absolute value of this.
- See Also:
-
RNABS
Rational number absolute value.- Parameters:
R
- is a rational number.- Returns:
- the absolute value of R.
-
compareTo
Rational number comparison.- Specified by:
compareTo
in interfaceComparable<BigRational>
- Specified by:
compareTo
in interfaceElement<BigRational>
- Parameters:
S
- BigRational.- Returns:
- SIGN(this-S).
-
RNCOMP
Rational number comparison.- Parameters:
R
- BigRational.S
- BigRational.- Returns:
- SIGN(R-S).
-
RNDEN
Rational number denominator.- Parameters:
R
- BigRational.- Returns:
- R.denominator().
-
subtract
Rational number difference.- Specified by:
subtract
in interfaceAbelianGroupElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this-S.
-
RNDIF
Rational number difference.- Parameters:
R
- BigRational.S
- BigRational.- Returns:
- R-S.
-
RNDWR
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
Rational number from integer.- Parameters:
A
- BigInteger.- Returns:
- A/1.
-
inverse
Rational number inverse.- Specified by:
inverse
in interfaceMonoidElem<BigRational>
- Returns:
- 1/this.
- See Also:
-
RNINV
Rational number inverse.- Parameters:
R
- BigRational.- Returns:
- 1/R.
-
negate
Rational number negative.- Specified by:
negate
in interfaceAbelianGroupElem<BigRational>
- Returns:
- -this.
- See Also:
-
RNNEG
Rational number negative.- Parameters:
R
- BigRational.- Returns:
- -R.
-
RNNUM
Rational number numerator.- Parameters:
R
- BigRational.- Returns:
- R.numerator().
-
multiply
Rational number product.- Specified by:
multiply
in interfaceMonoidElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this*S.
-
RNPROD
Rational number product.- Parameters:
R
- BigRational.S
- BigRational.- Returns:
- R*S.
-
divide
Rational number quotient.- Specified by:
divide
in interfaceMonoidElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this/S.
-
RNQ
Rational number quotient.- Parameters:
R
- BigRational.S
- BigRational.- Returns:
- R/S.
-
remainder
Rational number remainder.- Specified by:
remainder
in interfaceMonoidElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this-(this/S)*S
-
quotientRemainder
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
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
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
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:
-
RNSIGN
Rational number sign.- Parameters:
R
- BigRational.- Returns:
- R.signum().
-
sum
Rational number sum.- Specified by:
sum
in interfaceAbelianGroupElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- this+S.
-
RNSUM
Rational number sum.- Parameters:
R
- BigRational.S
- BigRational.- Returns:
- R+S.
-
parse
Parse rational number from String.- Specified by:
parse
in interfaceElemFactory<BigRational>
- Parameters:
s
- String.- Returns:
- BigRational from s.
-
parse
Parse rational number from Reader.- Specified by:
parse
in interfaceElemFactory<BigRational>
- Parameters:
r
- Reader.- Returns:
- next BigRational from r.
-
gcd
Rational number greatest common divisor.- Specified by:
gcd
in interfaceRingElem<BigRational>
- Parameters:
S
- BigRational.- Returns:
- gcd(this,S).
-
egcd
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
BigRational ceiling.- Returns:
- ceiling of this.
-
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
Get a BigRational iterator.- Specified by:
iterator
in interfaceIterable<BigRational>
- Returns:
- a iterator over all rationals.
-
uniqueIterator
Get a BigRational iterator with no duplicates.- Returns:
- a iterator over all rationals without duplicates.
-