示例#1
0
文件: add.c 项目: jpflori/pari
GEN
addir_sign(GEN x, long sx, GEN y, long sy)
{
  long e, l, ly;
  GEN z;

  if (!sx) return rcopy_sign(y, sy);
  e = expo(y) - expi(x);
  if (!sy)
  {
    if (e >= 0) return rcopy_sign(y, sy);
    z = itor(x, nbits2prec(-e));
    setsigne(z, sx); return z;
  }

  ly = lg(y);
  if (e > 0)
  {
    l = ly - divsBIL(e);
    if (l < 3) return rcopy_sign(y, sy);
  }
  else l = ly + nbits2extraprec(-e);
  z = (GEN)avma;
  y = addrr_sign(itor(x,l), sx, y, sy);
  ly = lg(y); while (ly--) *--z = y[ly];
  avma = (pari_sp)z; return z;
}
示例#2
0
int tbir_read_nbits( ptbir_image_data tid, int bitcount, int *value )
{
	int data;
	int bitsleft;

	if ( tid == NULL ) {
		return 0;
	}

	if ( tbir_read_check( tid, bitcount ) == 0 ) {
		return 0;
	}

	bitsleft = 8 - tid->cbit;

	if ( bitsleft > bitcount ) {
		data = tid->buffer[tid->cbyte];
		data = data >> (bitsleft - bitcount);
		data = data & (expi(2, bitcount)-1);

		tid->cbit += bitcount;

		*value = data;
		return 1;
	}
示例#3
0
文件: F2xqE.c 项目: jkeuffer/pari
static GEN
_lift_iter(void *E, GEN x2, GEN q)
{
  struct _frob_lift *F = (struct _frob_lift*) E;
  long N = expi(q);
  GEN TN = ZXT_remi2n(F->T, N);
  GEN y2 = Z2XQ_frob(x2, TN, q);
  GEN x2y2 = FpX_rem(ZX_remi2n(ZX_mul(x2, y2), N), TN, q);
  GEN s = ZX_add(ZX_add(x2, ZX_shifti(y2, 1)), ZX_shifti(x2y2, 3));
  GEN V = ZX_add(ZX_add(ZX_sqr(s), y2), ZX_shifti(x2y2, 2));
  return mkvec4(FpX_rem(ZX_remi2n(V, N), TN, q),x2,y2,s);
}