Changeset 2f864f in git


Ignore:
Timestamp:
Apr 25, 2014, 11:08:33 AM (10 years ago)
Author:
Adi Popescu <adi_popescum@…>
Branches:
(u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
Children:
496d32096dc1f1c559bf60d8a50a2a64954c798b
Parents:
3e31b23164a20e1e92831c2b2593d0e9883ee807
git-author:
Adi Popescu <adi_popescum@yahoo.de>2014-04-25 11:08:33+02:00
git-committer:
Adi Popescu <adi_popescum@yahoo.de>2014-05-05 11:08:44+02:00
Message:
add: cfQuot1
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • Singular/ipassign.cc

    r3e31b2 r2f864f  
    744744  assume(res->Data()==NULL);
    745745  origr = rCopy(currRing);
     746  qr = rCopy(currRing);
    746747
    747748#ifdef HAVE_RINGS
     
    749750  if((rField_is_Ring(currRing)) && (idPosConstant(id) != -1))
    750751    {
    751         qr = updateQring(currRing, id, idPosConstant(id));
    752         if(qr == NULL)
     752        //qr = updateQring(currRing, id, idPosConstant(id));
     753        //rWrite(currRing);
     754        number c;
     755        //printf("\n");
     756        c = p_GetCoeff(id->m[idPosConstant(id)], currRing);
     757        qr->cf = currRing->cf->cfQuot1(c, currRing->cf);
     758        //rWrite(qr);
     759        if(qr->cf == NULL)
    753760            return TRUE;
    754761    }
  • libpolys/coeffs/coeffs.h

    r3e31b2 r2f864f  
    376376  int_number    modNumber;
    377377  unsigned long mod2mMask;
     378 
    378379#endif
     380    //change basering r to r/c
     381    coeffs (*cfQuot1)(number c, const coeffs r);
     382
    379383  /*CF: for blackbox rings */
    380384  void * data;
     
    950954}
    951955
     956static inline coeffs cfQuot1(number c, const coeffs r)
     957{ assume(r != NULL); return r->cfQuot1(c, r); }
     958
    952959/// print a number (BEWARE of string buffers!)
    953960/// mostly for debugging
  • libpolys/coeffs/modulop.cc

    r3e31b2 r2f864f  
    555555        {
    556556          i++;
    557           r->npExpTable[i] =(int)(((long)w * (long)r->npExpTable[i-1])
    558                                % r->ch);
     557          r->npExpTable[i] =(int)(((long)w * (long)r->npExpTable[i-1]) % r->ch);
    559558          r->npLogTable[r->npExpTable[i]] = i;
    560559          if /*(i == r->ch - 1 ) ||*/ (/*(*/ r->npExpTable[i] == 1 /*)*/)
  • libpolys/coeffs/rintegers.cc

    r3e31b2 r2f864f  
    2121#include <coeffs/mpr_complex.h>
    2222#include <coeffs/rintegers.h>
     23#include <coeffs/rmodulon.h>
    2324#include "si_gmp.h"
    2425
     
    386387{
    387388  return omStrDup("integer");
     389}
     390
     391coeffs nrzcfQuot1(number c, const coeffs r)
     392{
     393    int ch = r->cfInt(c, r);
     394    int_number dummy;
     395    dummy = (int_number) omAlloc(sizeof(mpz_t));
     396    mpz_init_set_ui(dummy, ch);
     397    ZnmInfo info;
     398    info.base = dummy;
     399    info.exp = (unsigned long) 1;
     400    coeffs rr = nInitChar(n_Zn, (void*)&info);
     401    return(rr);
    388402}
    389403
     
    429443  r->cfSetMap = nrzSetMap;
    430444  r->cfCoeffWrite = nrzCoeffWrite;
     445  r->cfQuot1 = nrzcfQuot1;
    431446  // debug stuff
    432447
  • libpolys/coeffs/rintegers.h

    r3e31b2 r2f864f  
    5252void    nrzInitExp(int c, coeffs r);
    5353void    nrzDelete(number *a, const coeffs r);
     54coeffs  nrzcfQuot1(number c, const coeffs r);
    5455
    5556number nrzMapQ(number from, const coeffs src, const coeffs dst);
  • libpolys/coeffs/rmodulo2m.cc

    r3e31b2 r2f864f  
    2121#include <coeffs/mpr_complex.h>
    2222#include <coeffs/rmodulo2m.h>
     23#include <coeffs/rmodulon.h>
    2324#include "si_gmp.h"
    2425
     
    4243    int m=(int)(long)(p);
    4344    unsigned long mm=r->mod2mMask;
    44     if ((mm>>m)==1L) return TRUE;
     45    if (((mm+1)>>m)==1L) return TRUE;
    4546  }
    4647  return FALSE;
     
    5253  sprintf(s,"integer,2,%lu",r->modExponent);
    5354  return s;
     55}
     56
     57coeffs nr2mcfQuot1(number c, const coeffs r)
     58{
     59    coeffs rr;
     60    int ch = r->cfInt(c, r);
     61    mpz_t a,b;
     62    mpz_init_set(a, r->modNumber);
     63    mpz_init_set_ui(b, ch);
     64    int_number gcd;
     65    gcd = (int_number) omAlloc(sizeof(mpz_t));
     66    mpz_init(gcd);
     67    mpz_gcd(gcd, a,b);
     68    if(mpz_cmp_ui(gcd, 1) == 0)
     69        {
     70            WerrorS("constant in q-ideal is coprime to modulus in ground ring");
     71            WerrorS("Unable to create qring!");
     72            return NULL;
     73        }
     74    if(mpz_cmp_ui(gcd, 2) == 0)
     75    {
     76        rr = nInitChar(n_Zp, (void*)2);
     77    }
     78    else
     79    {
     80        ZnmInfo info;
     81        info.base = r->modBase;
     82        int kNew = 1;
     83        mpz_t baseTokNew;
     84        mpz_init(baseTokNew);
     85        mpz_set(baseTokNew, r->modBase);
     86        while(mpz_cmp(gcd, baseTokNew) > 0)
     87        {
     88          kNew++;
     89          mpz_mul(baseTokNew, baseTokNew, r->modBase);
     90        }
     91        info.exp = kNew;
     92        mpz_clear(baseTokNew);
     93        rr = nInitChar(n_Z2m, (void*)(long)kNew);
     94    }
     95    return(rr);
    5496}
    5597
     
    105147  r->cfCoeffWrite  = nr2mCoeffWrite;
    106148  r->cfInit_bigint = nr2mMapQ;
     149  r->cfQuot1       = nr2mcfQuot1;
    107150#ifdef LDEBUG
    108151  r->cfDBTest      = nr2mDBTest;
  • libpolys/coeffs/rmodulo2m.h

    r3e31b2 r2f864f  
    4848char *  nr2mName        (number n, const coeffs r);
    4949void    nr2mCoeffWrite  (const coeffs r, BOOLEAN details);
     50coeffs  nr2mcfQuot1(number c, const coeffs r);
    5051#ifdef LDEBUG
    5152BOOLEAN nr2mDBTest      (number a, const char *f, const int l, const coeffs r);
  • libpolys/coeffs/rmodulon.cc

    r3e31b2 r2f864f  
    5757  omFreeSize(b,l);
    5858  return s;
     59}
     60
     61coeffs nrncfQuot1(number c, const coeffs r)
     62{
     63    coeffs rr;
     64    int ch = r->cfInt(c, r);
     65    mpz_t a,b;
     66    mpz_init_set(a, r->modNumber);
     67    mpz_init_set_ui(b, ch);
     68    int_number gcd;
     69    gcd = (int_number) omAlloc(sizeof(mpz_t));
     70    mpz_init(gcd);
     71    mpz_gcd(gcd, a,b);
     72    if(mpz_cmp_ui(gcd, 1) == 0)
     73        {
     74            WerrorS("constant in q-ideal is coprime to modulus in ground ring");
     75            WerrorS("Unable to create qring!");
     76            return NULL;
     77        }
     78    if(r->modExponent == 1)
     79    {
     80        ZnmInfo info;
     81        info.base = gcd;
     82        info.exp = (unsigned long) 1;
     83        rr = nInitChar(n_Zn, (void*)&info);
     84    }
     85    else
     86    {
     87        ZnmInfo info;
     88        info.base = r->modBase;
     89        int kNew = 1;
     90        mpz_t baseTokNew;
     91        mpz_init(baseTokNew);
     92        mpz_set(baseTokNew, r->modBase);
     93        while(mpz_cmp(gcd, baseTokNew) > 0)
     94        {
     95          kNew++;
     96          mpz_mul(baseTokNew, baseTokNew, r->modBase);
     97        }
     98        //printf("\nkNew = %i\n",kNew);
     99        info.exp = kNew;
     100        mpz_clear(baseTokNew);
     101        rr = nInitChar(n_Znm, (void*)&info);
     102    }
     103    return(rr);
    59104}
    60105
     
    111156  r->cfInit_bigint = nrnMapQ;
    112157  r->cfKillChar    = ndKillChar;
     158  r->cfQuot1       = nrncfQuot1;
    113159#ifdef LDEBUG
    114160  r->cfDBTest      = nrnDBTest;
  • libpolys/coeffs/rmodulon.h

    r3e31b2 r2f864f  
    5454void    nrnSetExp(unsigned long c, const coeffs r);
    5555void    nrnInitExp(unsigned long c, const coeffs r);
     56coeffs  nrncfQuot1(number c, const coeffs r);
    5657
    5758number nrnMapQ(number from, const coeffs src, const coeffs dst);
Note: See TracChangeset for help on using the changeset viewer.