Example #1
0
void
_fmpq_submul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den,
            const fmpz_t op2num, const fmpz_t op2den)
{
    fmpz_t u, v;

    fmpz_init(u);
    fmpz_init(v);

    _fmpq_mul(u, v, op1num, op1den, op2num, op2den);
    _fmpq_sub(rnum, rden, rnum, rden, u, v);

    fmpz_clear(u);
    fmpz_clear(v);
}
Example #2
0
void _nf_elem_sub_lf(nf_elem_t a, const nf_elem_t b, 
                                   const nf_elem_t c, const nf_t nf, int can)
{
   const fmpz * const p = LNF_ELEM_NUMREF(b);
   const fmpz * const q = LNF_ELEM_DENREF(b);
   const fmpz * const r = LNF_ELEM_NUMREF(c);
   const fmpz * const s = LNF_ELEM_DENREF(c);
   fmpz * const rnum = LNF_ELEM_NUMREF(a);
   fmpz * const rden = LNF_ELEM_DENREF(a);
   fmpz_t t;

   if (can)
      _fmpq_sub(rnum, rden, p, q, r, s);
   else
   {
      /* Same denominator */
      if (fmpz_equal(q, s))
      {
         fmpz_sub(rnum, p, r);
         fmpz_set(rden, q);

         return;
      }

      /* p/q is an integer */
      if (fmpz_is_one(q))
      {
         fmpz_init(t);

         fmpz_mul(t, p, s);
         fmpz_sub(rnum, t, r);
         fmpz_set(rden, s);

         fmpz_clear(t);

         return;
      }

      /* r/s is an integer */
      if (fmpz_is_one(s))
      {
         fmpz_init(t);

         fmpz_mul(t, r, q);
         fmpz_sub(rnum, t, p);
         fmpz_set(rden, q);

         fmpz_clear(t);

         return;
      }

      /*
         We want to compute p/q - r/s which is (p*s - q*r, q*s).
      */

      fmpz_init(t);

      fmpz_mul(t, q, r);
      fmpz_mul(rnum, p, s);
      fmpz_sub(rnum, rnum, t);
      fmpz_mul(rden, q, s);

      fmpz_clear(t);
   }
}
Example #3
0
File: sub.c Project: goens/flint2
void fmpq_sub(fmpq_t res, const fmpq_t op1, const fmpq_t op2)
{
    _fmpq_sub(fmpq_numref(res), fmpq_denref(res),
              fmpq_numref(op1), fmpq_denref(op1),
              fmpq_numref(op2), fmpq_denref(op2));
}