Package org.ojalgo.scalar
Class ExactDecimal<S extends ExactDecimal<S>>
- java.lang.Object
-
- org.ojalgo.scalar.ExactDecimal<S>
-
- All Implemented Interfaces:
java.lang.Comparable<S>
,Field<Scalar<S>>
,Group
,Group.Additive<Scalar<S>>
,Group.Multiplicative<Scalar<S>>
,NormedVectorSpace<Scalar<S>,S>
,Operation
,Operation.Addition<Scalar<S>>
,Operation.Division<Scalar<S>>
,Operation.Multiplication<Scalar<S>>
,Operation.Subtraction<Scalar<S>>
,Ring<Scalar<S>>
,ScalarOperation
,ScalarOperation.Addition<Scalar<S>,S>
,ScalarOperation.Division<Scalar<S>,S>
,ScalarOperation.Multiplication<Scalar<S>,S>
,ScalarOperation.Subtraction<Scalar<S>,S>
,VectorSpace<Scalar<S>,S>
,Scalar<S>
,SelfDeclaringScalar<S>
,AccessScalar<S>
,Tensor<S,Scalar<S>>
,NumberContext.Enforceable<S>
,NumberDefinition
public abstract class ExactDecimal<S extends ExactDecimal<S>> extends java.lang.Object implements SelfDeclaringScalar<S>
To help implement exact decimal numbers with a fixed number of decimal places (fixed scale).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ExactDecimal.Descriptor
static interface
ExactDecimal.Factory<S extends ExactDecimal<S>>
-
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.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 java.math.BigDecimal
myDecimal
private long
myNumerator
-
Constructor Summary
Constructors Modifier Constructor Description protected
ExactDecimal(long numerator)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description S
add(double scalarAddend)
S
add(S scalarAddend)
int
compareTo(S reference)
S
conjugate()
This method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...protected abstract ExactDecimal.Descriptor
descriptor()
S
divide(double scalarDivisor)
S
divide(S scalarDivisor)
double
doubleValue()
S
enforce(NumberContext context)
protected static long
extractUnscaledValue(java.math.BigDecimal decimal, NumberContext cntxt)
float
floatValue()
S
get()
int
intValue()
S
invert()
The multiplicative inverse.boolean
isAbsolute()
boolean
isSmall(double comparedTo)
long
longValue()
S
multiply(double scalarMultiplicand)
S
multiply(S scalarMultiplicand)
S
negate()
The additive inverse of this.double
norm()
this == this.signum().multiply(this.norm())
(package private) long
numerator()
S
power(int power)
Multiply by itselfpower
times.S
signum()
this == this.signum().multiply(this.norm())
S
subtract(double scalarSubtrahend)
S
subtract(S scalarSubtrahend)
java.math.BigDecimal
toBigDecimal()
private java.math.BigDecimal
toBigDecimal(NumberContext context)
java.lang.String
toString()
java.lang.String
toString(NumberContext context)
protected abstract S
wrap(long numerator)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, 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
-
-
-
-
Method Detail
-
extractUnscaledValue
protected static long extractUnscaledValue(java.math.BigDecimal decimal, NumberContext cntxt)
-
add
public final S add(double scalarAddend)
- Specified by:
add
in interfaceScalarOperation.Addition<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
add
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this + scalarAddend
.
-
add
public final S add(S scalarAddend)
- Specified by:
add
in interfaceScalarOperation.Addition<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
add
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this + scalarAddend
.
-
compareTo
public final int compareTo(S reference)
- Specified by:
compareTo
in interfacejava.lang.Comparable<S extends ExactDecimal<S>>
-
conjugate
public final S 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<S extends ExactDecimal<S>>
- Specified by:
conjugate
in interfaceVectorSpace<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
-
divide
public final S divide(double scalarDivisor)
- Specified by:
divide
in interfaceScalarOperation.Division<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
divide
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this / scalarDivisor
.
-
divide
public final S divide(S scalarDivisor)
- Specified by:
divide
in interfaceScalarOperation.Division<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
divide
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this / scalarDivisor
.
-
doubleValue
public final double doubleValue()
- Specified by:
doubleValue
in interfaceNumberDefinition
-
enforce
public final S enforce(NumberContext context)
- Specified by:
enforce
in interfaceNumberContext.Enforceable<S extends ExactDecimal<S>>
-
floatValue
public final float floatValue()
- Specified by:
floatValue
in interfaceNumberDefinition
-
get
public final S get()
- Specified by:
get
in interfaceAccessScalar<S extends ExactDecimal<S>>
-
intValue
public final int intValue()
- Specified by:
intValue
in interfaceNumberDefinition
-
invert
public final S invert()
Description copied from interface:Group.Multiplicative
The multiplicative inverse.- Specified by:
invert
in interfaceGroup.Multiplicative<S extends ExactDecimal<S>>
- Specified by:
invert
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
IDENTITY / this
.
-
isAbsolute
public final boolean isAbsolute()
- Specified by:
isAbsolute
in interfaceScalar<S extends ExactDecimal<S>>
- 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 final boolean isSmall(double comparedTo)
- Specified by:
isSmall
in interfaceNormedVectorSpace<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Parameters:
comparedTo
- What to compare with- Returns:
- true if this is small compared to the magnitude of the input reference value.
-
longValue
public final long longValue()
- Specified by:
longValue
in interfaceNumberDefinition
-
multiply
public final S multiply(double scalarMultiplicand)
- Specified by:
multiply
in interfaceScalarOperation.Multiplication<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
multiply
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this * scalarMultiplicand
.
-
multiply
public final S multiply(S scalarMultiplicand)
- Specified by:
multiply
in interfaceScalarOperation.Multiplication<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
multiply
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this * multiplicand
.
-
negate
public final S negate()
Description copied from interface:Group.Additive
The additive inverse of this.- Specified by:
negate
in interfaceGroup.Additive<S extends ExactDecimal<S>>
- Specified by:
negate
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
-this
.
-
norm
public final double norm()
Description copied from interface:NormedVectorSpace
this == this.signum().multiply(this.norm())
- Specified by:
norm
in interfaceNormedVectorSpace<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Returns:
- The norm
-
power
public S power(int power)
Description copied from interface:Operation.Multiplication
Multiply by itselfpower
times.- Specified by:
power
in interfaceOperation.Multiplication<S extends ExactDecimal<S>>
- Specified by:
power
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
-
signum
public final S signum()
Description copied from interface:NormedVectorSpace
this == this.signum().multiply(this.norm())
- Specified by:
signum
in interfaceNormedVectorSpace<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
signum
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
- A unit "vector"
-
subtract
public final S subtract(double scalarSubtrahend)
- Specified by:
subtract
in interfaceScalarOperation.Subtraction<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
subtract
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this - scalarSubtrahend
.
-
subtract
public final S subtract(S scalarSubtrahend)
- Specified by:
subtract
in interfaceScalarOperation.Subtraction<Scalar<S extends ExactDecimal<S>>,S extends ExactDecimal<S>>
- Specified by:
subtract
in interfaceSelfDeclaringScalar<S extends ExactDecimal<S>>
- Returns:
this - scalarSubtrahend
.
-
toBigDecimal
public final java.math.BigDecimal toBigDecimal()
- Specified by:
toBigDecimal
in interfaceScalar<S extends ExactDecimal<S>>
-
toString
public final java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
toString
public final java.lang.String toString(NumberContext context)
- Specified by:
toString
in interfaceScalar<S extends ExactDecimal<S>>
-
toBigDecimal
private final java.math.BigDecimal toBigDecimal(NumberContext context)
-
descriptor
protected abstract ExactDecimal.Descriptor descriptor()
-
wrap
protected abstract S wrap(long numerator)
-
numerator
final long numerator()
-
-