org.apfloat.internal
Class LongCRTMath

java.lang.Object
  extended byorg.apfloat.internal.LongCRTMath
All Implemented Interfaces:
LongModConstants, LongRadixConstants
Direct Known Subclasses:
LongCarryCRT

public class LongCRTMath
extends Object
implements LongModConstants, LongRadixConstants

Basic arithmetic for calculating the Chinese Remainder Theorem. Works for the long type.

Version:
1.0
Author:
Mikko Tommila

Field Summary
 
Fields inherited from interface org.apfloat.internal.LongModConstants
MAX_POWER_OF_TWO_BASE, MAX_POWER_OF_TWO_BITS, MAX_TRANSFORM_LENGTH, MODULUS, PRIMITIVE_ROOT
 
Fields inherited from interface org.apfloat.internal.LongRadixConstants
BASE, BASE_DIGITS, MAX_EXPONENT, MINIMUM_FOR_DIGITS
 
Constructor Summary
LongCRTMath(int radix)
          Creates a carry-CRT math using the specified radix.
 
Method Summary
 long add(long[] src, long[] srcDst)
          Adds three words.
 long compare(long[] src1, long[] src2)
          Compares three words.
 long divide(long[] srcDst)
          Divides three words by the base to produce two words.
 void multiply(long[] src, long factor, long[] dst)
          Multiplies two words by one word to produce a result of three words.
 void subtract(long[] src, long[] srcDst)
          Subtracts three words.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LongCRTMath

public LongCRTMath(int radix)
Creates a carry-CRT math using the specified radix.

Parameters:
radix - The radix that will be used.
Method Detail

multiply

public final void multiply(long[] src,
                           long factor,
                           long[] 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 long compare(long[] src1,
                          long[] 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 long add(long[] src,
                      long[] 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(long[] src,
                           long[] 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 long divide(long[] 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.