Package org.apfloat.internal
Class FloatNTTConvolutionStepStrategy
- java.lang.Object
-
- org.apfloat.internal.FloatElementaryModMath
-
- org.apfloat.internal.FloatModMath
-
- org.apfloat.internal.FloatNTTConvolutionStepStrategy
-
- All Implemented Interfaces:
Parallelizable
,NTTConvolutionStepStrategy
public class FloatNTTConvolutionStepStrategy extends FloatModMath implements NTTConvolutionStepStrategy, Parallelizable
Steps of a three-NTT convolution for thefloat
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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
FloatNTTConvolutionStepStrategy.MultiplyInPlaceRunnable
private class
FloatNTTConvolutionStepStrategy.SquareInPlaceRunnable
-
Constructor Summary
Constructors Constructor Description FloatNTTConvolutionStepStrategy()
Default constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected 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.FloatModMath
createWTable, getForwardNthRoot, getInverseNthRoot, modDivide, modInverse, modPow, negate
-
Methods inherited from class org.apfloat.internal.FloatElementaryModMath
getModulus, modAdd, modMultiply, modSubtract, setModulus
-
-
-
-
Method Detail
-
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.
-
-