# Interface CarryCRTStrategy

All Known Implementing Classes:
  `StepCarryCRTStrategy`

public interface CarryCRTStrategy
Interface for performing the final step of a three-modulus Number Theoretic Transform based convolution.

Since:
  1.7.0
Version:
  1.7.0
Author:
  Mikko Tommila

- ## Method Summary

  Modifier and Type
  Method
  Description
  `DataStorage`
  `carryCRT(DataStorage resultMod0, DataStorage resultMod1, DataStorage resultMod2, long resultSize)`
  Calculate the final result of a three-NTT convolution.

- ## Method Details

  - ### carryCRT

    DataStorage carryCRT(DataStorage resultMod0, DataStorage resultMod1, DataStorage resultMod2, long resultSize) throws ApfloatRuntimeException
    Calculate the final result of a three-NTT convolution.

    Performs a Chinese Remainder Theorem (CRT) on each element of the three result data sets to get the result of each element modulo the product of the three moduli. Then it calculates the carries to get the final result.

    Note that the return value's initial word may be zero or non-zero, depending on how large the result is.

    Assumes that `MODULUS[0] > MODULUS[1] > MODULUS[2]`.

    Parameters:
      `resultMod0` - The result modulo `MODULUS[0]`.
      `resultMod1` - The result modulo `MODULUS[1]`.
      `resultMod2` - The result modulo `MODULUS[2]`.
      `resultSize` - The number of elements needed in the final result.
    Returns:
      The final result with the CRT performed and the carries calculated.
    Throws:
      `ApfloatRuntimeException`