Пример #1
0
long* mult(long* ele1, long* ele2, long index)
{
	int i,m,pow;
	long *ele3=emptyElement(index);
		for(i=0;i<getDeg(index);i++)						//current power of ele 1
		{
			for(m=0;m<getDeg(index);m++)					//current power of ele 2
			{	pow=modDeg(i+m,index);							//calculate the new power of the product
				ele3[pow]=mod(ele3[pow]+ele1[i]*ele2[m],index);
			}
		}
	return ele3;
}
Пример #2
0
/*generate empty Element*/
long* emptyElement(long index)
{
	long *elem;
	int i=0;
	if( NULL ==(elem = malloc(getDeg(index)*sizeof(long))) )					//allocate required memory for the ring
			{printf("not enough memory to generate Ring\n");				//if not enough memory is available prompt error
			return (long*) -1;
			}
	for(i=0;i<getDeg(index);i++)												//generate a random number for every parameter
		{
			elem[i]=0;
		}
	return elem;
}
Пример #3
0
/*misc functions*/
void printEle(long* ele ,long index)
{
int i=0;
for (i=0;i<getDeg(index);i++)
	{
	printf("%d ",ele[i]);
	}
}
Пример #4
0
long* sub(long* ele1, long* ele2, long index)
{
	int i=0;
	long *ele3=emptyElement(index);
	for(i=0;i<getDeg(index);i++)
		{
			ele3[i]=mod(ele1[i]-ele2[i]+getQ(index),index);
		}
	return ele3;
}
Пример #5
0
long* randNormElement(long index)
{
	long *elem;
	int i=0;
	float u,v,test; 																	//variables needed to generate normal distribution
	if( NULL ==(elem = malloc(getDeg(index)*sizeof(long))) )					//allocate required memory for the ring
				{printf("not enough memory to generate Ring\n");				//if not enough memory is available prompt error
				return (long*) -1;
				}
	for(i=0;i<getDeg(index);i++)												//generate a random number for every parameter
	{
		u=(float)rand()/RAND_MAX;
		v=(float)rand()/RAND_MAX;
		test=(sqrt(-2*log(u))*cos(TWO_PI*v));

		test=round(test*getQ(index)+0.5);													//discretesize values
		elem[i]=mod(test+getQ(index)*3,index);											//adding 3 times the modulus to the number to make sure that it isnt negative
	}

return elem;
}
Пример #6
0
void addShot(int x, int y, int ox, int oy, int color) {
  int i, d, ds;
  Shot *st;
  for ( i=0 ; i<SHOT_MAX ; i++ ) {
    shotIdx--; if ( shotIdx < 0 ) shotIdx = SHOT_MAX-1;
    if ( shot[shotIdx].cnt < 0 ) break;
  }
  if ( i >= SHOT_MAX ) return;
  st = &(shot[shotIdx]);
  st->x = (float)x/FIELD_SCREEN_RATIO; st->y = -(float)y/FIELD_SCREEN_RATIO;
  d = getDeg(-ox, oy); ds = getDistance(ox, oy);
  st->mx = -(float)sctbl[d]    *SHOT_SPEED/(FIELD_SCREEN_RATIO*256);
  st->my =  (float)sctbl[d+256]*SHOT_SPEED/(FIELD_SCREEN_RATIO*256);
  st->d = (float)d*360/1024;
  st->color = color;
  st->cnt = ds/SHOT_SPEED;
  st->width = 0.07;
  st->height = 0.1;
}