Package org.ojalgo.scalar
Class RationalNumber
- java.lang.Object
-
- org.ojalgo.scalar.RationalNumber
-
- All Implemented Interfaces:
java.lang.Comparable<RationalNumber>
,Field<Scalar<RationalNumber>>
,Group
,Group.Additive<Scalar<RationalNumber>>
,Group.Multiplicative<Scalar<RationalNumber>>
,NormedVectorSpace<Scalar<RationalNumber>,RationalNumber>
,Operation
,Operation.Addition<Scalar<RationalNumber>>
,Operation.Division<Scalar<RationalNumber>>
,Operation.Multiplication<Scalar<RationalNumber>>
,Operation.Subtraction<Scalar<RationalNumber>>
,Ring<Scalar<RationalNumber>>
,ScalarOperation
,ScalarOperation.Addition<Scalar<RationalNumber>,RationalNumber>
,ScalarOperation.Division<Scalar<RationalNumber>,RationalNumber>
,ScalarOperation.Multiplication<Scalar<RationalNumber>,RationalNumber>
,ScalarOperation.Subtraction<Scalar<RationalNumber>,RationalNumber>
,VectorSpace<Scalar<RationalNumber>,RationalNumber>
,Scalar<RationalNumber>
,SelfDeclaringScalar<RationalNumber>
,AccessScalar<RationalNumber>
,Tensor<RationalNumber,Scalar<RationalNumber>>
,NumberContext.Enforceable<RationalNumber>
,NumberDefinition
public final class RationalNumber extends java.lang.Object implements SelfDeclaringScalar<RationalNumber>
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.ojalgo.algebra.Group
Group.Additive<T>, Group.Multiplicative<T>
-
Nested classes/interfaces inherited from interface org.ojalgo.algebra.Operation
Operation.Addition<T>, Operation.Division<T>, Operation.Multiplication<T>, Operation.Subtraction<T>
-
Nested classes/interfaces inherited from interface org.ojalgo.scalar.Scalar
Scalar.Factory<N extends java.lang.Comparable<N>>
-
Nested classes/interfaces inherited from interface org.ojalgo.algebra.ScalarOperation
ScalarOperation.Addition<T,N extends java.lang.Comparable<N>>, ScalarOperation.Division<T,N extends java.lang.Comparable<N>>, ScalarOperation.Multiplication<T,N extends java.lang.Comparable<N>>, ScalarOperation.Subtraction<T,N extends java.lang.Comparable<N>>
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
DIVIDE
static Scalar.Factory<RationalNumber>
FACTORY
private static java.lang.String
LEFT
private static int
MAX_BITS
static RationalNumber
MAX_VALUE
static RationalNumber
MIN_VALUE
private java.math.BigDecimal
myDecimal
private long
myDenominator
private long
myNumerator
static RationalNumber
NaN
static RationalNumber
NEG
static RationalNumber
NEGATIVE_INFINITY
static RationalNumber
ONE
static RationalNumber
POSITIVE_INFINITY
private static java.lang.String
RIGHT
private static long
SAFE_LIMIT
static RationalNumber
TWO
static RationalNumber
ZERO
-
Constructor Summary
Constructors Modifier Constructor Description RationalNumber()
private
RationalNumber(long numerator, long denominator)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description RationalNumber
add(double arg)
RationalNumber
add(RationalNumber arg)
private static RationalNumber
add(RationalNumber arg1, RationalNumber arg2)
int
compareTo(RationalNumber reference)
RationalNumber
conjugate()
This method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...RationalNumber
divide(double arg)
RationalNumber
divide(RationalNumber arg)
private static RationalNumber
divide(RationalNumber arg1, RationalNumber arg2)
double
doubleValue()
RationalNumber
enforce(NumberContext context)
boolean
equals(java.lang.Object obj)
float
floatValue()
private static RationalNumber
fromLong(long d)
private static long
gcd(long a, long b)
Greatest Common DenominatorRationalNumber
get()
(package private) long
getDenominator()
(package private) long
getNumerator()
int
hashCode()
int
intValue()
RationalNumber
invert()
The multiplicative inverse.boolean
isAbsolute()
static boolean
isAbsolute(RationalNumber value)
private boolean
isInfinite()
static boolean
isInfinite(RationalNumber value)
private boolean
isNaN()
static boolean
isNaN(RationalNumber value)
boolean
isSmall(double comparedTo)
static boolean
isSmall(double comparedTo, RationalNumber value)
long
longValue()
RationalNumber
multiply(double arg)
RationalNumber
multiply(RationalNumber arg)
private static RationalNumber
multiply(RationalNumber arg1, RationalNumber arg2)
RationalNumber
negate()
The additive inverse of this.double
norm()
this == this.signum().multiply(this.norm())
static RationalNumber
of(long numerator, long denominator)
private static RationalNumber
of(java.math.BigInteger numer, java.math.BigInteger denom)
static RationalNumber
parse(java.lang.CharSequence plainNumberString)
RationalNumber
power(int power)
Multiply by itselfpower
times.static RationalNumber
rational(double d)
private static RationalNumber
rational(double d, double error, int depthLimit)
private int
sign()
RationalNumber
signum()
this == this.signum().multiply(this.norm())
private long
size()
RationalNumber
subtract(double arg)
RationalNumber
subtract(RationalNumber arg)
private static RationalNumber
subtract(RationalNumber arg1, RationalNumber arg2)
java.math.BigDecimal
toBigDecimal()
private java.math.BigDecimal
toBigDecimal(java.math.MathContext context)
java.lang.String
toString()
private static java.lang.String
toString(RationalNumber aNmbr)
java.lang.String
toString(NumberContext context)
static RationalNumber
valueOf(double value)
static RationalNumber
valueOf(long value)
static RationalNumber
valueOf(java.lang.Comparable<?> number)
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.ojalgo.type.NumberDefinition
booleanValue, byteValue, shortValue
-
Methods inherited from interface org.ojalgo.scalar.Scalar
add, dimensions, divide, multiply, rank, subtract, toPlainString
-
Methods inherited from interface org.ojalgo.scalar.SelfDeclaringScalar
add, divide, multiply, subtract
-
Methods inherited from interface org.ojalgo.tensor.Tensor
components, isSameShape
-
-
-
-
Field Detail
-
FACTORY
public static final Scalar.Factory<RationalNumber> FACTORY
-
MAX_VALUE
public static final RationalNumber MAX_VALUE
-
MIN_VALUE
public static final RationalNumber MIN_VALUE
-
NaN
public static final RationalNumber NaN
-
NEG
public static final RationalNumber NEG
-
NEGATIVE_INFINITY
public static final RationalNumber NEGATIVE_INFINITY
-
ONE
public static final RationalNumber ONE
-
POSITIVE_INFINITY
public static final RationalNumber POSITIVE_INFINITY
-
TWO
public static final RationalNumber TWO
-
ZERO
public static final RationalNumber ZERO
-
DIVIDE
private static final java.lang.String DIVIDE
- See Also:
- Constant Field Values
-
LEFT
private static final java.lang.String LEFT
- See Also:
- Constant Field Values
-
MAX_BITS
private static final int MAX_BITS
-
RIGHT
private static final java.lang.String RIGHT
- See Also:
- Constant Field Values
-
SAFE_LIMIT
private static final long SAFE_LIMIT
-
myDecimal
private transient java.math.BigDecimal myDecimal
-
myDenominator
private final long myDenominator
-
myNumerator
private final long myNumerator
-
-
Method Detail
-
isAbsolute
public static boolean isAbsolute(RationalNumber value)
-
isInfinite
public static boolean isInfinite(RationalNumber value)
-
isNaN
public static boolean isNaN(RationalNumber value)
-
isSmall
public static boolean isSmall(double comparedTo, RationalNumber value)
-
of
public static RationalNumber of(long numerator, long denominator)
-
parse
public static RationalNumber parse(java.lang.CharSequence plainNumberString)
-
rational
public static RationalNumber rational(double d)
-
valueOf
public static RationalNumber valueOf(java.lang.Comparable<?> number)
-
valueOf
public static RationalNumber valueOf(double value)
-
valueOf
public static RationalNumber valueOf(long value)
-
add
private static RationalNumber add(RationalNumber arg1, RationalNumber arg2)
-
divide
private static RationalNumber divide(RationalNumber arg1, RationalNumber arg2)
-
fromLong
private static RationalNumber fromLong(long d)
-
gcd
private static long gcd(long a, long b)
Greatest Common DenominatorIt uses Python-style gcd, with the sign of gcd equal to sign of b; that enables us to simplify fractions in one step
-
multiply
private static RationalNumber multiply(RationalNumber arg1, RationalNumber arg2)
-
of
private static RationalNumber of(java.math.BigInteger numer, java.math.BigInteger denom)
-
rational
private static RationalNumber rational(double d, double error, int depthLimit)
-
subtract
private static RationalNumber subtract(RationalNumber arg1, RationalNumber arg2)
-
toString
private static java.lang.String toString(RationalNumber aNmbr)
-
add
public RationalNumber add(double arg)
- Specified by:
add
in interfaceScalarOperation.Addition<Scalar<RationalNumber>,RationalNumber>
- Specified by:
add
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this + scalarAddend
.
-
add
public RationalNumber add(RationalNumber arg)
- Specified by:
add
in interfaceScalarOperation.Addition<Scalar<RationalNumber>,RationalNumber>
- Specified by:
add
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this + scalarAddend
.
-
compareTo
public int compareTo(RationalNumber reference)
- Specified by:
compareTo
in interfacejava.lang.Comparable<RationalNumber>
-
conjugate
public RationalNumber conjugate()
Description copied from interface:VectorSpace
This method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...
The conjugate transpose of a matrix and/or the conjugate of a scalar/field like ComplexNumber or Quaternion.
The conjugate transpose of a real matrix is simply its transpose.
- Specified by:
conjugate
in interfaceSelfDeclaringScalar<RationalNumber>
- Specified by:
conjugate
in interfaceVectorSpace<Scalar<RationalNumber>,RationalNumber>
-
divide
public RationalNumber divide(double arg)
- Specified by:
divide
in interfaceScalarOperation.Division<Scalar<RationalNumber>,RationalNumber>
- Specified by:
divide
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this / scalarDivisor
.
-
divide
public RationalNumber divide(RationalNumber arg)
- Specified by:
divide
in interfaceScalarOperation.Division<Scalar<RationalNumber>,RationalNumber>
- Specified by:
divide
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this / scalarDivisor
.
-
doubleValue
public double doubleValue()
- Specified by:
doubleValue
in interfaceNumberDefinition
-
enforce
public RationalNumber enforce(NumberContext context)
- Specified by:
enforce
in interfaceNumberContext.Enforceable<RationalNumber>
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
floatValue
public float floatValue()
- Specified by:
floatValue
in interfaceNumberDefinition
-
get
public RationalNumber get()
- Specified by:
get
in interfaceAccessScalar<RationalNumber>
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
intValue
public int intValue()
- Specified by:
intValue
in interfaceNumberDefinition
-
invert
public RationalNumber invert()
Description copied from interface:Group.Multiplicative
The multiplicative inverse.- Specified by:
invert
in interfaceGroup.Multiplicative<Scalar<RationalNumber>>
- Specified by:
invert
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
IDENTITY / this
.
-
isAbsolute
public boolean isAbsolute()
- Specified by:
isAbsolute
in interfaceScalar<RationalNumber>
- Returns:
- true if this is equal to its own norm, modulus or absolute value (non-negative real part and no imaginary part); otherwise false.
- See Also:
Scalar.isAbsolute()
-
isSmall
public boolean isSmall(double comparedTo)
- Specified by:
isSmall
in interfaceNormedVectorSpace<Scalar<RationalNumber>,RationalNumber>
- Parameters:
comparedTo
- What to compare with- Returns:
- true if this is small compared to the magnitude of the input reference value.
-
longValue
public long longValue()
- Specified by:
longValue
in interfaceNumberDefinition
-
multiply
public RationalNumber multiply(double arg)
- Specified by:
multiply
in interfaceScalarOperation.Multiplication<Scalar<RationalNumber>,RationalNumber>
- Specified by:
multiply
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this * scalarMultiplicand
.
-
multiply
public RationalNumber multiply(RationalNumber arg)
- Specified by:
multiply
in interfaceScalarOperation.Multiplication<Scalar<RationalNumber>,RationalNumber>
- Specified by:
multiply
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this * multiplicand
.
-
negate
public RationalNumber negate()
Description copied from interface:Group.Additive
The additive inverse of this.- Specified by:
negate
in interfaceGroup.Additive<Scalar<RationalNumber>>
- Specified by:
negate
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
-this
.
-
norm
public double norm()
Description copied from interface:NormedVectorSpace
this == this.signum().multiply(this.norm())
- Specified by:
norm
in interfaceNormedVectorSpace<Scalar<RationalNumber>,RationalNumber>
- Returns:
- The norm
-
power
public RationalNumber power(int power)
Description copied from interface:Operation.Multiplication
Multiply by itselfpower
times.- Specified by:
power
in interfaceOperation.Multiplication<Scalar<RationalNumber>>
- Specified by:
power
in interfaceSelfDeclaringScalar<RationalNumber>
-
signum
public RationalNumber signum()
Description copied from interface:NormedVectorSpace
this == this.signum().multiply(this.norm())
- Specified by:
signum
in interfaceNormedVectorSpace<Scalar<RationalNumber>,RationalNumber>
- Specified by:
signum
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
- A unit "vector"
-
subtract
public RationalNumber subtract(double arg)
- Specified by:
subtract
in interfaceScalarOperation.Subtraction<Scalar<RationalNumber>,RationalNumber>
- Specified by:
subtract
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this - scalarSubtrahend
.
-
subtract
public RationalNumber subtract(RationalNumber arg)
- Specified by:
subtract
in interfaceScalarOperation.Subtraction<Scalar<RationalNumber>,RationalNumber>
- Specified by:
subtract
in interfaceSelfDeclaringScalar<RationalNumber>
- Returns:
this - scalarSubtrahend
.
-
toBigDecimal
public java.math.BigDecimal toBigDecimal()
- Specified by:
toBigDecimal
in interfaceScalar<RationalNumber>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
toString
public java.lang.String toString(NumberContext context)
- Specified by:
toString
in interfaceScalar<RationalNumber>
-
isInfinite
private boolean isInfinite()
-
isNaN
private boolean isNaN()
-
sign
private int sign()
-
size
private long size()
-
toBigDecimal
private java.math.BigDecimal toBigDecimal(java.math.MathContext context)
-
getDenominator
long getDenominator()
-
getNumerator
long getNumerator()
-
-