- 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.StringDIVIDEstatic Scalar.Factory<RationalNumber>FACTORYprivate static java.lang.StringLEFTprivate static intMAX_BITSstatic RationalNumberMAX_VALUEstatic RationalNumberMIN_VALUEprivate java.math.BigDecimalmyDecimalprivate longmyDenominatorprivate longmyNumeratorstatic RationalNumberNaNstatic RationalNumberNEGstatic RationalNumberNEGATIVE_INFINITYstatic RationalNumberONEstatic RationalNumberPOSITIVE_INFINITYprivate static java.lang.StringRIGHTprivate static longSAFE_LIMITstatic RationalNumberTWOstatic RationalNumberZERO
-
Constructor Summary
Constructors Modifier Constructor Description RationalNumber()privateRationalNumber(long numerator, long denominator)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description RationalNumberadd(double arg)RationalNumberadd(RationalNumber arg)private static RationalNumberadd(RationalNumber arg1, RationalNumber arg2)intcompareTo(RationalNumber reference)RationalNumberconjugate()This method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...RationalNumberdivide(double arg)RationalNumberdivide(RationalNumber arg)private static RationalNumberdivide(RationalNumber arg1, RationalNumber arg2)doubledoubleValue()RationalNumberenforce(NumberContext context)booleanequals(java.lang.Object obj)floatfloatValue()private static RationalNumberfromLong(long d)private static longgcd(long a, long b)Greatest Common DenominatorRationalNumberget()(package private) longgetDenominator()(package private) longgetNumerator()inthashCode()intintValue()RationalNumberinvert()The multiplicative inverse.booleanisAbsolute()static booleanisAbsolute(RationalNumber value)private booleanisInfinite()static booleanisInfinite(RationalNumber value)private booleanisNaN()static booleanisNaN(RationalNumber value)booleanisSmall(double comparedTo)static booleanisSmall(double comparedTo, RationalNumber value)booleanisZero()Tests if this scalar value is exactly zero.longlongValue()RationalNumbermultiply(double arg)RationalNumbermultiply(RationalNumber arg)private static RationalNumbermultiply(RationalNumber arg1, RationalNumber arg2)RationalNumbernegate()The additive inverse of this.doublenorm()this == this.signum().multiply(this.norm())static RationalNumberof(long numerator, long denominator)private static RationalNumberof(java.math.BigInteger numer, java.math.BigInteger denom)static RationalNumberparse(java.lang.CharSequence plainNumberString)RationalNumberpower(int power)Multiply by itselfpowertimes.static RationalNumberrational(double d)private static RationalNumberrational(double d, double error, int depthLimit)private intsign()RationalNumbersignum()this == this.signum().multiply(this.norm())private longsize()RationalNumbersubtract(double arg)RationalNumbersubtract(RationalNumber arg)private static RationalNumbersubtract(RationalNumber arg1, RationalNumber arg2)java.math.BigDecimaltoBigDecimal()private java.math.BigDecimaltoBigDecimal(java.math.MathContext context)java.lang.StringtoString()private static java.lang.StringtoString(RationalNumber aNmbr)java.lang.StringtoString(NumberContext context)static RationalNumbervalueOf(double value)static RationalNumbervalueOf(long value)static RationalNumbervalueOf(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:
addin interfaceScalarOperation.Addition<Scalar<RationalNumber>,RationalNumber>- Specified by:
addin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this + scalarAddend.
-
add
public RationalNumber add(RationalNumber arg)
- Specified by:
addin interfaceScalarOperation.Addition<Scalar<RationalNumber>,RationalNumber>- Specified by:
addin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this + scalarAddend.
-
compareTo
public int compareTo(RationalNumber reference)
- Specified by:
compareToin interfacejava.lang.Comparable<RationalNumber>
-
conjugate
public RationalNumber conjugate()
Description copied from interface:VectorSpaceThis 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:
conjugatein interfaceSelfDeclaringScalar<RationalNumber>- Specified by:
conjugatein interfaceVectorSpace<Scalar<RationalNumber>,RationalNumber>
-
divide
public RationalNumber divide(double arg)
- Specified by:
dividein interfaceScalarOperation.Division<Scalar<RationalNumber>,RationalNumber>- Specified by:
dividein interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this / scalarDivisor.
-
divide
public RationalNumber divide(RationalNumber arg)
- Specified by:
dividein interfaceScalarOperation.Division<Scalar<RationalNumber>,RationalNumber>- Specified by:
dividein interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this / scalarDivisor.
-
doubleValue
public double doubleValue()
- Specified by:
doubleValuein interfaceNumberDefinition
-
enforce
public RationalNumber enforce(NumberContext context)
- Specified by:
enforcein interfaceNumberContext.Enforceable<RationalNumber>
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classjava.lang.Object
-
floatValue
public float floatValue()
- Specified by:
floatValuein interfaceNumberDefinition
-
get
public RationalNumber get()
- Specified by:
getin interfaceAccessScalar<RationalNumber>
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
intValue
public int intValue()
- Specified by:
intValuein interfaceNumberDefinition
-
invert
public RationalNumber invert()
Description copied from interface:Group.MultiplicativeThe multiplicative inverse.- Specified by:
invertin interfaceGroup.Multiplicative<Scalar<RationalNumber>>- Specified by:
invertin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
IDENTITY / this.
-
isAbsolute
public boolean isAbsolute()
- Specified by:
isAbsolutein 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:
isSmallin 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.
-
isZero
public boolean isZero()
Description copied from interface:ScalarTests if this scalar value is exactly zero.Each implementation should test for zero as exactly as possible based on what's achievable with that specific scalar type. The purpose is NOT to have similar behavior between different implementations, but rather to leverage the full precision and capabilities of each type.
For example:
- Primitive types (like
double) should use exact equality comparison - High-precision types (like
Quadruple) should check both base and remainder components - Arbitrary-precision types (like
BigDecimal) should use their built-in zero detection - Complex types should check both real and imaginary parts
This method should NOT use tolerance-based comparisons or approximate zero detection, as those are better handled by context-aware methods like
NormedVectorSpace.isSmall(double).- Specified by:
isZeroin interfaceScalar<RationalNumber>- Returns:
- true if this scalar represents exactly zero, false otherwise
- See Also:
NormedVectorSpace.isSmall(double)
- Primitive types (like
-
longValue
public long longValue()
- Specified by:
longValuein interfaceNumberDefinition
-
multiply
public RationalNumber multiply(double arg)
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<RationalNumber>,RationalNumber>- Specified by:
multiplyin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this * scalarMultiplicand.
-
multiply
public RationalNumber multiply(RationalNumber arg)
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<RationalNumber>,RationalNumber>- Specified by:
multiplyin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this * multiplicand.
-
negate
public RationalNumber negate()
Description copied from interface:Group.AdditiveThe additive inverse of this.- Specified by:
negatein interfaceGroup.Additive<Scalar<RationalNumber>>- Specified by:
negatein interfaceSelfDeclaringScalar<RationalNumber>- Returns:
-this.
-
norm
public double norm()
Description copied from interface:NormedVectorSpacethis == this.signum().multiply(this.norm())- Specified by:
normin interfaceNormedVectorSpace<Scalar<RationalNumber>,RationalNumber>- Returns:
- The norm
-
power
public RationalNumber power(int power)
Description copied from interface:Operation.MultiplicationMultiply by itselfpowertimes.- Specified by:
powerin interfaceOperation.Multiplication<Scalar<RationalNumber>>- Specified by:
powerin interfaceSelfDeclaringScalar<RationalNumber>
-
signum
public RationalNumber signum()
Description copied from interface:NormedVectorSpacethis == this.signum().multiply(this.norm())- Specified by:
signumin interfaceNormedVectorSpace<Scalar<RationalNumber>,RationalNumber>- Specified by:
signumin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
- A unit "vector"
-
subtract
public RationalNumber subtract(double arg)
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<RationalNumber>,RationalNumber>- Specified by:
subtractin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this - scalarSubtrahend.
-
subtract
public RationalNumber subtract(RationalNumber arg)
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<RationalNumber>,RationalNumber>- Specified by:
subtractin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this - scalarSubtrahend.
-
toBigDecimal
public java.math.BigDecimal toBigDecimal()
- Specified by:
toBigDecimalin interfaceScalar<RationalNumber>
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
toString
public java.lang.String toString(NumberContext context)
- Specified by:
toStringin 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()
-
-