Package org.apfloat.internal
Class Factor3NTTStrategy
- java.lang.Object
-
- org.apfloat.internal.Factor3NTTStrategy
-
- All Implemented Interfaces:
Parallelizable,NTTStrategy
- Direct Known Subclasses:
IntAparapiFactor3NTTStrategy,LongAparapiFactor3NTTStrategy
public class Factor3NTTStrategy extends java.lang.Object implements NTTStrategy, Parallelizable
A transform that implements a 3-point transform on top of another Number Theoretic Transform that does transforms of length 2n.- Since:
- 1.7.0
- Version:
- 1.8.3
- See Also:
Factor3NTTStepStrategy
-
-
Field Summary
Fields Modifier and Type Field Description private NTTStrategyfactor2Strategyprotected Factor3NTTStepStrategystepStrategyThe factor-3 NTT steps.
-
Constructor Summary
Constructors Constructor Description Factor3NTTStrategy(NTTStrategy factor2Strategy)Creates a new factor-3 transform strategy on top of an existing transform.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description longgetTransformLength(long size)Return the supported transform length for the specified data size.voidinverseTransform(DataStorage dataStorage, int modulus, long totalTransformLength)Perform an inverse transform on the data.voidtransform(DataStorage dataStorage, int modulus)Perform a forward transform on the data.
-
-
-
Field Detail
-
stepStrategy
protected Factor3NTTStepStrategy stepStrategy
The factor-3 NTT steps.
-
factor2Strategy
private NTTStrategy factor2Strategy
-
-
Constructor Detail
-
Factor3NTTStrategy
public Factor3NTTStrategy(NTTStrategy factor2Strategy)
Creates a new factor-3 transform strategy on top of an existing transform. The underlying transform needs to be capable of only doing transforms of length 2n.- Parameters:
factor2Strategy- The underlying transformation strategy, that can be capable of only doing radix-2 transforms.
-
-
Method Detail
-
transform
public void transform(DataStorage dataStorage, int modulus) throws ApfloatRuntimeException
Description copied from interface:NTTStrategyPerform a forward transform on the data.Multiple moduli can be used, if the convolution algorithm uses the Chinese Remainder Theorem to calculate the final result.
- Specified by:
transformin interfaceNTTStrategy- Parameters:
dataStorage- The data to be transformed.modulus- Number of modulus to use (in case the transform supports multiple moduli).- Throws:
ApfloatRuntimeException
-
inverseTransform
public void inverseTransform(DataStorage dataStorage, int modulus, long totalTransformLength) throws ApfloatRuntimeException
Description copied from interface:NTTStrategyPerform an inverse transform on the data.Multiple moduli can be used, if the convolution algorithm uses the Chinese Remainder Theorem to calculate the final result.
- Specified by:
inverseTransformin interfaceNTTStrategy- Parameters:
dataStorage- The data to be transformed.modulus- Number of modulus to use (in case the transform supports multiple moduli).totalTransformLength- Total transform length; the final result elements are divided by this value.- Throws:
ApfloatRuntimeException
-
getTransformLength
public long getTransformLength(long size)
Description copied from interface:NTTStrategyReturn the supported transform length for the specified data size.- Specified by:
getTransformLengthin interfaceNTTStrategy- Parameters:
size- Length of the data to be transformed.- Returns:
- Length of the transform needed by this transform.
-
-