Example #1
0
inline TNum  fast_Ring< TNum, kdefs>::addInv(const TNum a) const
{
	#ifdef SAFE
		assert(Convert(a)==a);
	#endif
	return additiveInverseTable[ getSingleIndex(a) ];
}
Example #2
0
vector<int> Lattice::getCenterSingleIndex() const
{
    vector<int> res;
    vector< vector<int> > idx_list =  getCenterIndex();
    for(int i=0; i< idx_list.size(); ++i)
        res.push_back( getSingleIndex(idx_list[i]) );
    return res;
}
Example #3
0
 TNum* fast_Ring<TNum,kdefs>::createMultiplicativeInverseTable()
{
	int i, j, k, l; 
	
	size_t tableSize = getMaxSingleIndex() + 1;

	TNum * inverses1 = new TNum[ tableSize ];

	for (i=0; i<getCharacteristic(); i++)

		for (j=0; j<((getCharacteristic()-1)*getEpsPrecision())+1; j++)
		{
			TNum 	z1(i, j);
			size_t 	index = getSingleIndex( z1 );

			assert(index<tableSize && index>=0);

			inverses1[ index ]  = TNum::Zero; 

			for (k=0; k<getCharacteristic(); k++)
				for (l=0; l<((getCharacteristic()-1)*getEpsPrecision())+1; l++)
				{
					TNum 	z2(k, l);
					TNum 	z;
					z.setX(  ((int)z1.getX() * (int)z2.getX()) % getCharacteristic()  );

					z.setEps ( (  (int)z1.getX() * (int)z2.getEps() 
						     + (int)z2.getX() * (int)z1.getEps()  
						   ) % getCharacteristic()  );

					if ( z == TNum::One )
					{
						size_t index_2 = getSingleIndex( z1);
						assert( index_2<tableSize && index_2 >=0);
						inverses1 [index_2 ] = z2;
						break;
					}
				}
		}
	return inverses1;
}
Example #4
0
inline void fast_Ring< TNum, kdefs>::multInvInPlace( TNum & a) const
{
	#ifdef SAFE
		assert( a==Convert(a) );
	#endif
	TNum const &	res = multiplicativeInverseTable[getSingleIndex( a)];
	if (res.isNotZero() ) 
	{
		a = res;
	}
	else 
	{
		std::cerr << "Multiplicative inverse does not exist!" << std::endl;
		throw "Multiplicative inverse does not exist!" ;
	}
}
Example #5
0
 TNum* 	fast_Ring<TNum,kdefs>::createAdditiveInverseTable()
{
	int i, j; 

	size_t 	tableSize = getMaxSingleIndex() + 1;

	TNum*	tadditiveInverseTable = new TNum[ tableSize ];

	for (i=0; i<getCharacteristic(); i++)
		for (j=0; j<( ( getCharacteristic()-1 )*getEpsPrecision() )+1; j++)
		{
			TNum 	z1(i, j);

			size_t 	index = getSingleIndex( z1); 
			assert(index<tableSize && index>=0);

			TNum 	z2(	( getCharacteristic() - i) % getCharacteristic(),
					 (getCharacteristic() - j) % getCharacteristic()    );

			tadditiveInverseTable[ index ] = z2;
		}
	return tadditiveInverseTable;
}