Class Quadruple
- All Implemented Interfaces:
Comparable<Quadruple>, Field<Scalar<Quadruple>>, Group, Group.Additive<Scalar<Quadruple>>, Group.Multiplicative<Scalar<Quadruple>>, NormedVectorSpace<Scalar<Quadruple>, Quadruple>, Operation, Operation.Addition<Scalar<Quadruple>>, Operation.Division<Scalar<Quadruple>>, Operation.Multiplication<Scalar<Quadruple>>, Operation.Subtraction<Scalar<Quadruple>>, Ring<Scalar<Quadruple>>, ScalarOperation, ScalarOperation.Addition<Scalar<Quadruple>, Quadruple>, ScalarOperation.Division<Scalar<Quadruple>, Quadruple>, ScalarOperation.Multiplication<Scalar<Quadruple>, Quadruple>, ScalarOperation.Subtraction<Scalar<Quadruple>, Quadruple>, VectorSpace<Scalar<Quadruple>, Quadruple>, Scalar<Quadruple>, SelfDeclaringScalar<Quadruple>, AccessScalar<Quadruple>, Tensor<Quadruple, Scalar<Quadruple>>, NumberContext.Enforceable<Quadruple>, NumberDefinition
https://stackoverflow.com/questions/66962567/how-to-emulate-double-precision-using-two-floats-in-opengl-es
https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/
https://www.researchgate.net/publication/228570156_Library_for_Double-Double_and_Quad-Double_Arithmetic
https://libntl.org
http://mrob.com/pub/math/f161.html
https://www.davidhbailey.com/dhbsoftware/
-
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 TypeFieldDescriptionstatic Scalar.Factory<Quadruple> static final Quadruplestatic final Quadrupleprivate final doubleprivate BigDecimalprivate final doublestatic final Quadruplestatic final Quadruplestatic final Quadruplestatic final Quadruplestatic final Quadrupleprivate static final double1+2^27 (Example code, that emulated double using float, had 1+2^13)static final Quadruplestatic final Quadruple -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionadd(double arg) private static Quadrupleadd(double base1, double remainder1, double base2, double remainder2) https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/intThis method will (most likely) be moved to some other interface in the future! Just have to figure out where it fits...divide(double arg) private static Quadrupledivide(double base1, double remainder1, double base2, double remainder2) High-precision division.private static Quadrupledoubleenforce(NumberContext context) booleanfloatget()(package private) doublegetBase()(package private) doubleinthashCode()intintValue()invert()The multiplicative inverse.booleanstatic booleanisAbsolute(Quadruple value) static booleanisInfinite(Quadruple value) static booleanbooleanisSmall(double comparedTo) static booleanbooleanisZero()Tests if this scalar value is exactly zero.longmultiply(double arg) private static Quadruplemultiply(double base1, double remainder1, double base2, double remainder2) https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/negate()The additive inverse of this.doublenorm()this == this.signum().multiply(this.norm())static Quadrupleparse(CharSequence plainNumberString) power(int power) Multiply by itselfpowertimes.private intsign()signum()this == this.signum().multiply(this.norm())subtract(double arg) private BigDecimaltoBigDecimal(MathContext context) toString()toString(NumberContext context) static QuadruplevalueOf(double value) static QuadruplevalueOf(Comparable<?> number) static QuadruplevalueOf(BigDecimal 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
-
SPLIT
private static final double SPLIT1+2^27 (Example code, that emulated double using float, had 1+2^13)- See Also:
-
myBase
private final double myBase -
myDecimal
-
myRemainder
private final double myRemainder
-
-
Constructor Details
-
Quadruple
public Quadruple() -
Quadruple
private Quadruple(double base) -
Quadruple
private Quadruple(double base, double remainder)
-
-
Method Details
-
isAbsolute
-
isInfinite
-
isNaN
-
isSmall
-
parse
-
valueOf
-
valueOf
-
valueOf
-
add
https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/ -
divide
High-precision division. -
divide
-
multiply
https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/ -
add
- Specified by:
addin interfaceScalarOperation.Addition<Scalar<Quadruple>, Quadruple>- Specified by:
addin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this + scalarAddend.
-
add
- Specified by:
addin interfaceScalarOperation.Addition<Scalar<Quadruple>, Quadruple>- Specified by:
addin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this + scalarAddend.
-
compareTo
- Specified by:
compareToin interfaceComparable<Quadruple>
-
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<Quadruple>- Specified by:
conjugatein interfaceVectorSpace<Scalar<Quadruple>, Quadruple>
-
divide
- Specified by:
dividein interfaceScalarOperation.Division<Scalar<Quadruple>, Quadruple>- Specified by:
dividein interfaceSelfDeclaringScalar<Quadruple>- Returns:
this / scalarDivisor.
-
divide
- Specified by:
dividein interfaceScalarOperation.Division<Scalar<Quadruple>, Quadruple>- Specified by:
dividein interfaceSelfDeclaringScalar<Quadruple>- Returns:
this / scalarDivisor.
-
doubleValue
public double doubleValue()- Specified by:
doubleValuein interfaceNumberDefinition
-
enforce
- Specified by:
enforcein interfaceNumberContext.Enforceable<Quadruple>
-
equals
-
floatValue
public float floatValue()- Specified by:
floatValuein interfaceNumberDefinition
-
get
- Specified by:
getin interfaceAccessScalar<Quadruple>
-
hashCode
-
intValue
public int intValue()- Specified by:
intValuein interfaceNumberDefinition
-
invert
Description copied from interface:Group.MultiplicativeThe multiplicative inverse.- Specified by:
invertin interfaceGroup.Multiplicative<Scalar<Quadruple>>- Specified by:
invertin interfaceSelfDeclaringScalar<Quadruple>- Returns:
IDENTITY / this.
-
isAbsolute
public boolean isAbsolute()- Specified by:
isAbsolutein interfaceScalar<Quadruple>- 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<Quadruple>, Quadruple>- 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). - Primitive types (like
-
longValue
public long longValue()- Specified by:
longValuein interfaceNumberDefinition
-
multiply
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<Quadruple>, Quadruple>- Specified by:
multiplyin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this * scalarMultiplicand.
-
multiply
- Specified by:
multiplyin interfaceScalarOperation.Multiplication<Scalar<Quadruple>, Quadruple>- Specified by:
multiplyin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this * multiplicand.
-
negate
Description copied from interface:Group.AdditiveThe additive inverse of this.- Specified by:
negatein interfaceGroup.Additive<Scalar<Quadruple>>- Specified by:
negatein interfaceSelfDeclaringScalar<Quadruple>- Returns:
-this.
-
norm
public double norm()Description copied from interface:NormedVectorSpacethis == this.signum().multiply(this.norm())- Specified by:
normin interfaceNormedVectorSpace<Scalar<Quadruple>, Quadruple>- Returns:
- The norm
-
power
Description copied from interface:Operation.MultiplicationMultiply by itselfpowertimes.- Specified by:
powerin interfaceOperation.Multiplication<Scalar<Quadruple>>- Specified by:
powerin interfaceSelfDeclaringScalar<Quadruple>
-
signum
Description copied from interface:NormedVectorSpacethis == this.signum().multiply(this.norm())- Specified by:
signumin interfaceNormedVectorSpace<Scalar<Quadruple>, Quadruple>- Specified by:
signumin interfaceSelfDeclaringScalar<Quadruple>- Returns:
- A unit "vector"
-
subtract
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<Quadruple>, Quadruple>- Specified by:
subtractin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this - scalarSubtrahend.
-
subtract
- Specified by:
subtractin interfaceScalarOperation.Subtraction<Scalar<Quadruple>, Quadruple>- Specified by:
subtractin interfaceSelfDeclaringScalar<Quadruple>- Returns:
this - scalarSubtrahend.
-
toBigDecimal
- Specified by:
toBigDecimalin interfaceScalar<Quadruple>
-
toString
-
toString
-
sign
private int sign() -
toBigDecimal
-
getBase
double getBase() -
getRemainder
double getRemainder()
-