Changeset 4c2cc1 in git for libpolys


Ignore:
Timestamp:
Dec 1, 2016, 4:30:01 PM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
72f5181b0615d9c0f91fee1c8cc55d57b70d9b58
Parents:
83f824ccb8af0c09308f49e50e6acf5ea6c667c7
git-author:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2016-12-01 16:30:01+01:00
git-committer:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2016-12-01 16:33:16+01:00
Message:
add: nrzXExtGcd, nrzQuotRem (rintegers.cc)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/coeffs/rintegers.cc

    r83f824c r4c2cc1  
    129129}
    130130
     131number  nrzXExtGcd (number a, number b, number *s, number *t, number *u, number *v, const coeffs )
     132{
     133  mpz_ptr erg = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     134  mpz_ptr bs = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     135  mpz_ptr bt = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     136  mpz_init(erg);
     137  mpz_init(bs);
     138  mpz_init(bt);
     139
     140  mpz_gcdext(erg, bs, bt, (mpz_ptr)a, (mpz_ptr)b);
     141
     142  mpz_ptr bu = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     143  mpz_ptr bv = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     144
     145  mpz_init_set(bu, (mpz_ptr) b);
     146  mpz_init_set(bv, (mpz_ptr) a);
     147
     148  assume(mpz_cmp_si(erg, 0));
     149
     150  mpz_div(bu, bu, erg);
     151  mpz_div(bv, bv, erg);
     152
     153  mpz_mul_si(bu, bu, -1);
     154  *u = (number) bu;
     155  *v = (number) bv;
     156
     157  *s = (number) bs;
     158  *t = (number) bt;
     159  return (number) erg;
     160}
     161
    131162void nrzPower (number a, int i, number * result, const coeffs)
    132163{
     
    279310  mpz_tdiv_q(erg, (mpz_ptr) a, (mpz_ptr) b);
    280311  return (number) erg;
     312}
     313
     314number nrzQuotRem (number a, number b, number * r, const coeffs )
     315{
     316  mpz_ptr qq = (mpz_ptr) omAllocBin(gmp_nrz_bin);
     317  mpz_init(qq);
     318  mpz_init((mpz_ptr)(*r));
     319  mpz_fdiv_qr(qq, (mpz_ptr)(*r), (mpz_ptr) a, (mpz_ptr) b);
     320  return (number) qq;
    281321}
    282322
     
    509549  r->cfSize  = nrzSize;
    510550  r->cfInt  = nrzInt;
    511   //#ifdef HAVE_RINGS
    512   r->cfDivComp = nrzDivComp; // only for ring stuff
    513   r->cfIsUnit = nrzIsUnit; // only for ring stuff
    514   r->cfGetUnit = nrzGetUnit; // only for ring stuff
    515   r->cfExtGcd = nrzExtGcd; // only for ring stuff
    516   r->cfDivBy = nrzDivBy; // only for ring stuff
    517   //#endif
     551  r->cfDivComp = nrzDivComp;
     552  r->cfIsUnit = nrzIsUnit;
     553  r->cfGetUnit = nrzGetUnit;
     554  r->cfExtGcd = nrzExtGcd;
     555  r->cfXExtGcd = nrzXExtGcd;
     556  r->cfDivBy = nrzDivBy;
    518557  r->cfInpNeg   = nrzNeg;
    519558  r->cfInvers= nrzInvers;
Note: See TracChangeset for help on using the changeset viewer.