Exemplo n.º 1
0
static GEN
bound_for_coeff(long m, GEN rr, GEN *maxroot)
{
  long i,r1, lrr=lg(rr);
  GEN p1,b1,b2,B,M, C = matpascal(m-1);

  for (r1=1; r1 < lrr; r1++)
    if (typ(rr[r1]) != t_REAL) break;
  r1--;

  rr = gabs(rr,0); *maxroot = vecmax(rr);
  for (i=1; i<lrr; i++)
    if (gcmp(gel(rr,i), gen_1) < 0) gel(rr,i) = gen_1;
  for (b1=gen_1,i=1; i<=r1; i++) b1 = gmul(b1, gel(rr,i));
  for (b2=gen_1    ; i<lrr; i++) b2 = gmul(b2, gel(rr,i));
  B = gmul(b1, gsqr(b2)); /* Mahler measure */
  M = cgetg(m+2, t_VEC); gel(M,1) = gel(M,2) = gen_0; /* unused */
  for (i=1; i<m; i++)
  {
    p1 = gadd(gmul(gcoeff(C, m, i+1), B),/* binom(m-1, i)   */
              gcoeff(C, m, i));          /* binom(m-1, i-1) */
    gel(M,i+2) = ceil_safe(p1);
  }
  return M;
}
Exemplo n.º 2
0
void line(CANVAS* canvas, const POINT *a, const POINT *b, unsigned int color)
{
    POINT cur;
    bool vline;
    short x0, x1, y0, y1, dx, dy, err, ystep, x, y;
    x0 = a->x;
    y0 = a->y;
    x1 = b->x;
    y1 = b->y;
    vline = gabs(y1 - y0) > gabs(x1 - x0);
    if (vline)
    {
        gswap(&x0, &y0);
        gswap(&x1, &y1);
    }
    if (x0 > x1)
    {
        gswap(&x0, &x1);
        gswap(&y0, &y1);
    }
    dx = x1 - x0;
    dy = gabs(y1 - y0);
    err = dx >> 1;
    ystep = (y0 < y1) ? 1 : -1;
    for (x = x0, y = y0; x <= x1; ++x)
    {
       if (vline)
       {
           cur.x = y;
           cur.y = x;
       }
       else
       {
           cur.x = x;
           cur.y = y;
       }
       put_pixel(canvas, &cur, color);
       err -= dy;
       if (err < 0)
       {
           y += ystep;
           err += dx;
       }
    }
}