Class RationalNumber
- All Implemented Interfaces:
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
-
Nested Class Summary
Nested classes/interfaces inherited from interface Group
Group.Additive<T>, Group.Multiplicative<T>Nested classes/interfaces inherited from interface Operation
Operation.Addition<T>, Operation.Division<T>, Operation.Multiplication<T>, Operation.Subtraction<T>Nested classes/interfaces inherited from interface Scalar
Scalar.Factory<N>Nested classes/interfaces inherited from interface ScalarOperation
ScalarOperation.Addition<T,N>, ScalarOperation.Division<T, N>, ScalarOperation.Multiplication<T, N>, ScalarOperation.Subtraction<T, N> -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final Stringstatic final Scalar.Factory<RationalNumber> private static final Stringprivate static final intstatic final RationalNumberstatic final RationalNumberprivate BigDecimalprivate final longprivate final longstatic final RationalNumberstatic final RationalNumberstatic final RationalNumberstatic final RationalNumberstatic final RationalNumberprivate static final Stringprivate static final longstatic final RationalNumberstatic final RationalNumber -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionadd(double arg) add(RationalNumber arg) private static RationalNumberadd(RationalNumber arg1, RationalNumber arg2) intcompareTo(RationalNumber reference) This method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...divide(double arg) divide(RationalNumber arg) private static RationalNumberdivide(RationalNumber arg1, RationalNumber arg2) doubleenforce(NumberContext context) booleanfloatprivate static RationalNumberfromLong(long d) private static longgcd(long a, long b) Greatest Common Denominatorget()(package private) long(package private) longinthashCode()intintValue()invert()The multiplicative inverse.booleanstatic booleanisAbsolute(RationalNumber value) private booleanstatic 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.longmultiply(double arg) multiply(RationalNumber arg) private static RationalNumbermultiply(RationalNumber arg1, RationalNumber arg2) negate()The additive inverse of this.doublenorm()this == this.signum().multiply(this.norm())static RationalNumberof(long numerator, long denominator) private static RationalNumberof(BigInteger numer, BigInteger denom) static RationalNumberparse(CharSequence plainNumberString) power(int power) Multiply by itselfpowertimes.static RationalNumberrational(double d) private static RationalNumberrational(double d, double error, int depthLimit) private intsign()signum()this == this.signum().multiply(this.norm())private longsize()subtract(double arg) subtract(RationalNumber arg) private static RationalNumbersubtract(RationalNumber arg1, RationalNumber arg2) private BigDecimaltoBigDecimal(MathContext context) toString()private static StringtoString(RationalNumber aNmbr) toString(NumberContext context) static RationalNumbervalueOf(double value) static RationalNumbervalueOf(long value) static RationalNumbervalueOf(Comparable<?> number) Methods inherited from interface NumberDefinition
booleanValue, byteValue, shortValueMethods inherited from interface Scalar
add, dimensions, divide, multiply, rank, subtract, toPlainStringMethods inherited from interface SelfDeclaringScalar
add, divide, multiply, subtractMethods inherited from interface Tensor
components, isSameShape
-
Field Details
-
FACTORY
-
MAX_VALUE
-
MIN_VALUE
-
NaN
-
NEG
-
NEGATIVE_INFINITY
-
ONE
-
POSITIVE_INFINITY
-
TWO
-
ZERO
-
DIVIDE
- See Also:
-
LEFT
- See Also:
-
MAX_BITS
private static final int MAX_BITS -
RIGHT
- See Also:
-
SAFE_LIMIT
private static final long SAFE_LIMIT -
myDecimal
-
myDenominator
private final long myDenominator -
myNumerator
private final long myNumerator
-
-
Constructor Details
-
RationalNumber
public RationalNumber() -
RationalNumber
private RationalNumber(long numerator, long denominator)
-
-
Method Details
-
isAbsolute
-
isInfinite
-
isNaN
-
isSmall
-
of
-
parse
-
rational
-
valueOf
-
valueOf
-
valueOf
-
add
-
divide
-
fromLong
-
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
-
of
-
rational
-
subtract
-
toString
-
add
- Specified by:
addin interfaceScalarOperation.Addition<Scalar<RationalNumber>, RationalNumber>- Specified by:
addin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this + scalarAddend.
-
add
- Specified by:
addin interfaceScalarOperation.Addition<Scalar<RationalNumber>, RationalNumber>- Specified by:
addin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this + scalarAddend.
-
compareTo
- Specified by:
compareToin interfaceComparable<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
- Specified by:
dividein interfaceScalarOperation.Division<Scalar<RationalNumber>, RationalNumber>- Specified by:
dividein interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this / scalarDivisor.
-
divide
- 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
- Specified by:
enforcein interfaceNumberContext.Enforceable<RationalNumber>
-
equals
-
floatValue
public float floatValue()- Specified by:
floatValuein interfaceNumberDefinition
-
get
- Specified by:
getin interfaceAccessScalar<RationalNumber>
-
hashCode
-
intValue
public int intValue()- Specified by:
intValuein interfaceNumberDefinition
-
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:
-
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:
- Primitive types (like
-
longValue
public long longValue()- Specified by:
longValuein interfaceNumberDefinition
-
multiply
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<RationalNumber>, RationalNumber>- Specified by:
multiplyin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this * scalarMultiplicand.
-
multiply
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<RationalNumber>, RationalNumber>- Specified by:
multiplyin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this * multiplicand.
-
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
Description copied from interface:Operation.MultiplicationMultiply by itselfpowertimes.- Specified by:
powerin interfaceOperation.Multiplication<Scalar<RationalNumber>>- Specified by:
powerin interfaceSelfDeclaringScalar<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
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<RationalNumber>, RationalNumber>- Specified by:
subtractin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this - scalarSubtrahend.
-
subtract
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<RationalNumber>, RationalNumber>- Specified by:
subtractin interfaceSelfDeclaringScalar<RationalNumber>- Returns:
this - scalarSubtrahend.
-
toBigDecimal
- Specified by:
toBigDecimalin interfaceScalar<RationalNumber>
-
toString
-
toString
- Specified by:
toStringin interfaceScalar<RationalNumber>
-
isInfinite
private boolean isInfinite() -
isNaN
private boolean isNaN() -
sign
private int sign() -
size
private long size() -
toBigDecimal
-
getDenominator
long getDenominator() -
getNumerator
long getNumerator()
-