# Class DoubleCRTMath

java.lang.Object
org.apfloat.internal.DoubleBaseMath
org.apfloat.internal.DoubleCRTMath

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `DoubleCarryCRTStepStrategy`

public class DoubleCRTMath extends DoubleBaseMath
Basic arithmetic for calculating the Chinese Remainder Theorem. Works for the `double` type.

Version:
  1.6
Author:
  Mikko Tommila
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DoubleCRTMath(int radix)`
  Creates a carry-CRT math using the specified radix.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final double`
  `add(double[] src, double[] srcDst)`
  Adds three words.
  `final double`
  `compare(double[] src1, double[] src2)`
  Compares three words.
  `final double`
  `divide(double[] srcDst)`
  Divides three words by the base to produce two words.
  `final void`
  `multiply(double[] src, double factor, double[] dst)`
  Multiplies two words by one word to produce a result of three words.
  `final void`
  `subtract(double[] src, double[] srcDst)`
  Subtracts three words.

  ### Methods inherited from class DoubleBaseMath

  `baseAdd, baseDivide, baseMultiplyAdd, baseSubtract`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### DoubleCRTMath

    public DoubleCRTMath(int radix)
    Creates a carry-CRT math using the specified radix.
    Parameters:
      `radix` - The radix that will be used.

- ## Method Details

  - ### multiply

    public final void multiply(double[] src, double factor, double[] dst)
    Multiplies two words by one word to produce a result of three words. Most significant word is stored first.
    Parameters:
      `src` - Source array, first multiplicand.
      `factor` - Second multiplicand.
      `dst` - Destination array.

  - ### compare

    public final double compare(double[] src1, double[] src2)
    Compares three words. Most significant word is stored first.
    Parameters:
      `src1` - First operand.
      `src2` - Second operand.
    Returns:
      Less than zero if `src1 < src2`, greater than zero if `src1 > src2` and zero if `src1 == src2`.

  - ### add

    public final double add(double[] src, double[] srcDst)
    Adds three words. Most significant word is stored first.
    Parameters:
      `src` - First operand.
      `srcDst` - Second operand, and destination of the operation.
    Returns:
      Overflow carry bit.

  - ### subtract

    public final void subtract(double[] src, double[] srcDst)
    Subtracts three words. Most significant word is stored first.
    Parameters:
      `src` - First operand.
      `srcDst` - Second operand, and destination of the operation.

  - ### divide

    public final double divide(double[] srcDst)
    Divides three words by the base to produce two words. Most significant word is stored first.
    Parameters:
      `srcDst` - Source and destination of the operation.
    Returns:
      Remainder of the division.