Package org.apfloat.internal
Class DoubleNTTConvolutionStepStrategy
java.lang.Object
org.apfloat.internal.DoubleElementaryModMath
org.apfloat.internal.DoubleModMath
org.apfloat.internal.DoubleNTTConvolutionStepStrategy
- All Implemented Interfaces:
Parallelizable
,NTTConvolutionStepStrategy
public class DoubleNTTConvolutionStepStrategy
extends DoubleModMath
implements NTTConvolutionStepStrategy, Parallelizable
Steps of a three-NTT convolution for the
double
type.
This class implements the details of the element-by-element multiplication
and element-by-element squaring of the transformed elements.The in-place multiplication and squaring of the data elements is done using a parallel algorithm, if the data fits in memory.
All access to this class must be externally synchronized.
- Since:
- 1.7.0
- Version:
- 1.9.0
- Author:
- Mikko Tommila
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected ParallelRunnable
createMultiplyInPlaceParallelRunnable
(DataStorage sourceAndDestination, DataStorage source, int modulus) Create a ParallelRunnable for multiplying the elements in-place.protected ParallelRunnable
createSquareInPlaceParallelRunnable
(DataStorage sourceAndDestination, int modulus) Create a ParallelRunnable for squaring the elements in-place.void
multiplyInPlace
(DataStorage sourceAndDestination, DataStorage source, int modulus) Linear multiplication in the number theoretic domain.void
squareInPlace
(DataStorage sourceAndDestination, int modulus) Linear squaring in the number theoretic domain.Methods inherited from class org.apfloat.internal.DoubleModMath
createWTable, getForwardNthRoot, getInverseNthRoot, modDivide, modInverse, modPow, negate
Methods inherited from class org.apfloat.internal.DoubleElementaryModMath
getModulus, modAdd, modMultiply, modSubtract, setModulus
-
Constructor Details
-
DoubleNTTConvolutionStepStrategy
public DoubleNTTConvolutionStepStrategy()Default constructor.
-
-
Method Details
-
multiplyInPlace
public void multiplyInPlace(DataStorage sourceAndDestination, DataStorage source, int modulus) throws ApfloatRuntimeException Description copied from interface:NTTConvolutionStepStrategy
Linear multiplication in the number theoretic domain. The operation issourceAndDestination[i] *= source[i] (mod m)
.For maximum performance,
sourceAndDestination
should be in memory if possible.- Specified by:
multiplyInPlace
in interfaceNTTConvolutionStepStrategy
- Parameters:
sourceAndDestination
- The first source data storage, which is also the destination.source
- The second source data storage.modulus
- Which modulus to use (0, 1, 2)- Throws:
ApfloatRuntimeException
-
squareInPlace
public void squareInPlace(DataStorage sourceAndDestination, int modulus) throws ApfloatRuntimeException Description copied from interface:NTTConvolutionStepStrategy
Linear squaring in the number theoretic domain. The operation issourceAndDestination[i] *= sourceAndDestination[i] (mod m)
.For maximum performance,
sourceAndDestination
should be in memory if possible.- Specified by:
squareInPlace
in interfaceNTTConvolutionStepStrategy
- Parameters:
sourceAndDestination
- The source data storage, which is also the destination.modulus
- Which modulus to use (0, 1, 2)- Throws:
ApfloatRuntimeException
-
createMultiplyInPlaceParallelRunnable
protected ParallelRunnable createMultiplyInPlaceParallelRunnable(DataStorage sourceAndDestination, DataStorage source, int modulus) Create a ParallelRunnable for multiplying the elements in-place.- Parameters:
sourceAndDestination
- The first source data storage, which is also the destination.source
- The second source data storage.modulus
- Which modulus to use (0, 1, 2)- Returns:
- An object suitable for multiplying the elements in parallel.
-
createSquareInPlaceParallelRunnable
protected ParallelRunnable createSquareInPlaceParallelRunnable(DataStorage sourceAndDestination, int modulus) Create a ParallelRunnable for squaring the elements in-place.- Parameters:
sourceAndDestination
- The source data storage, which is also the destination.modulus
- Which modulus to use (0, 1, 2)- Returns:
- An object suitable for squaring the elements in parallel.
-