Changeset 3510a6 in git


Ignore:
Timestamp:
May 5, 2010, 4:02:31 PM (13 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
d0a51ee4394b5f223004bd691b3fd91403cea0a1
Parents:
dc093ce0cffbd8b24b4eb47a678f5b0d90e52231
git-author:
Martin Lee <martinlee84@web.de>2010-05-05 16:02:31+02:00
git-committer:
Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:51:40+01:00
Message:
initial changes to ffields.cc and ffields.h (not completed yet)
Location:
coeffs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • coeffs/ffields.cc

    rdc093ce r3510a6  
    88
    99#include <string.h>
    10 #include <kernel/mod2.h>
    11 #include <omalloc/mylimits.h>
    12 #include <kernel/febase.h>
    13 #include <omalloc/omalloc.h>
    14 #include <kernel/numbers.h>
    15 #include <kernel/ring.h>
    16 #include <kernel/ffields.h>
     10#include "coeffs.h"
     11#include <mylimits.h>
     12#include <output.h>
     13#include <omalloc.h>
     14#include "numbers.h"
     15#include "ffields.h"
    1716
    1817int nfCharQ=0;  /* the number of elemts: q*/
     
    9190  0 };
    9291
     92const char* eati(const char *s, int *i)
     93{
     94  int l=0;
     95
     96  if    (*s >= '0' && *s <= '9')
     97  {
     98    *i = 0;
     99    while (*s >= '0' && *s <= '9')
     100    {
     101      *i *= 10;
     102      *i += *s++ - '0';
     103      l++;
     104      if ((l>=MAX_INT_LEN)||((*i) <0))
     105      {
     106        s-=l;
     107        Werror("`%s` greater than %d(max. integer representation)",
     108                s,MAX_INT_VAL);
     109        return s;
     110      }
     111    }
     112  }
     113  else *i = 1;
     114  return s;
     115}
     116
    93117/*1
    94118* numbers in GF(p^n):
     
    127151* k >= 0 ?
    128152*/
    129 BOOLEAN nfGreaterZero (number k)
     153BOOLEAN nfGreaterZero (number k, const coeffs r)
    130154{
    131155#ifdef LDEBUG
    132156  nfTest(k);
    133157#endif
    134   return !nfIsZero(k) && !nfIsMOne(k);
     158  return !nfIsZero(k, r) && !nfIsMOne(k, r);
    135159}
    136160
     
    138162* a*b
    139163*/
    140 number nfMult (number a,number b)
     164number nfMult (number a,number b, const coeffs r)
    141165{
    142166#ifdef LDEBUG
     
    158182* int -> number
    159183*/
    160 number nfInit (int i, const ring r)
     184number nfInit (int i, const coeffs r)
    161185{
    162186  // Hmm .. this is just to prevent initialization
     
    181205* the generating element `z`
    182206*/
    183 number nfPar (int i)
     207number nfPar (int i, const coeffs r)
    184208{
    185209  return (number)1;
     
    189213* the degree of the "alg. number"
    190214*/
    191 int nfParDeg(number n)
     215int nfParDeg(number n, const coeffs r)
    192216{
    193217#ifdef LDEBUG
     
    201225* number -> int
    202226*/
    203 int nfInt (number &n, const ring r)
     227int nfInt (number &n, const coeffs r)
    204228{
    205229  return 0;
     
    209233* a + b
    210234*/
    211 number nfAdd (number a, number b)
     235number nfAdd (number a, number b, const coeffs R)
    212236{
    213237/*4 z^a+z^b=z^b*(z^(a-b)+1), if a>=b; *
     
    248272* a - b
    249273*/
    250 number nfSub (number a, number b)
    251 {
    252   number mb = nfNeg(b);
    253   return nfAdd(a,mb);
     274number nfSub (number a, number b, const coeffs r)
     275{
     276  number mb = nfNeg(b, r);
     277  return nfAdd(a,mb,r);
    254278}
    255279
     
    257281* a == 0 ?
    258282*/
    259 BOOLEAN nfIsZero (number  a)
     283BOOLEAN nfIsZero (number  a, const coeffs r)
    260284{
    261285#ifdef LDEBUG
     
    268292* a == 1 ?
    269293*/
    270 BOOLEAN nfIsOne (number a)
     294BOOLEAN nfIsOne (number a, const coeffs r)
    271295{
    272296#ifdef LDEBUG
     
    279303* a == -1 ?
    280304*/
    281 BOOLEAN nfIsMOne (number a)
     305BOOLEAN nfIsMOne (number a, const coeffs r)
    282306{
    283307#ifdef LDEBUG
     
    291315* a / b
    292316*/
    293 number nfDiv (number a,number b)
     317number nfDiv (number a,number b, const coeffs r)
    294318{
    295319#ifdef LDEBUG
     
    319343* 1 / c
    320344*/
    321 number  nfInvers (number c)
     345number  nfInvers (number c, const coeffs r)
    322346{
    323347#ifdef LDEBUG
     
    338362* -c
    339363*/
    340 number nfNeg (number c)
     364number nfNeg (number c, const coeffs r)
    341365{
    342366/*4 -z^c=z^c*(-1)=z^c*nfM1*/
     
    356380* a > b ?
    357381*/
    358 BOOLEAN nfGreater (number a,number b)
     382BOOLEAN nfGreater (number a,number b, const coeffs r)
    359383{
    360384#ifdef LDEBUG
     
    368392* a == b ?
    369393*/
    370 BOOLEAN nfEqual (number a,number b)
     394BOOLEAN nfEqual (number a,number b, const coeffs r)
    371395{
    372396#ifdef LDEBUG
     
    380404* write via StringAppend
    381405*/
    382 void nfWrite (number &a, const ring r)
     406void nfWrite (number &a, const coeffs r)
    383407{
    384408#ifdef LDEBUG
     
    387411  if ((long)a==(long)nfCharQ)  StringAppendS("0");
    388412  else if ((long)a==0L)   StringAppendS("1");
    389   else if (nfIsMOne(a))   StringAppendS("-1");
     413  else if (nfIsMOne(a, r))   StringAppendS("-1");
    390414  else
    391415  {
     
    402426*
    403427*/
    404 char * nfName(number a)
     428char * nfName(number a, const coeffs r)
    405429{
    406430#ifdef LDEBUG
     
    408432#endif
    409433  char *s;
    410   char *nfParameter=currRing->parameter[0];
     434  char *nfParameter=r->parameter[0];
    411435  if (((long)a==(long)nfCharQ) || ((long)a==0L)) return NULL;
    412436  else if ((long)a==1L)
     
    424448* c ^ i with i>=0
    425449*/
    426 void nfPower (number a, int i, number * result)
     450void nfPower (number a, int i, number * result, const coeffs r)
    427451{
    428452#ifdef LDEBUG
     
    440464  else
    441465  {
    442     nfPower(a,i-1,result);
    443     *result = nfMult(a,*result);
     466    nfPower(a,i-1,result, r);
     467    *result = nfMult(a,*result, r);
    444468  }
    445469#ifdef LDEBUG
     
    472496* read a number
    473497*/
    474 const char * nfRead (const char *s, number *a)
     498const char * nfRead (const char *s, number *a, const coeffs r)
    475499{
    476500  int i;
     
    479503
    480504  s = nfEati(s, &i);
    481   z=nfInit(i, currRing);
     505  z=nfInit(i, r);
    482506  *a=z;
    483507  if (*s == '/')
     
    485509    s++;
    486510    s = nfEati(s, &i);
    487     n=nfInit(i, currRing);
    488     *a = nfDiv(z,n);
    489   }
    490   char *nfParameter=currRing->parameter[0];
     511    n=nfInit(i, r);
     512    *a = nfDiv(z,n,r);
     513  }
     514  char *nfParameter=r->parameter[0];
    491515  if (strncmp(s,nfParameter,strlen(nfParameter))==0)
    492516  {
     
    500524      i=1;
    501525    z=(number)(long)i;
    502     *a=nfMult(*a,z);
     526    *a=nfMult(*a,z,r);
    503527  }
    504528#ifdef LDEBUG
     
    701725nMapFunc nfSetMap(const ring src, const ring dst)
    702726{
    703   if (rField_is_GF(src,nfCharQ))
     727  if (nField_is_GF(src,nfCharQ))
    704728  {
    705729    return ndCopy;   /* GF(p,n) -> GF(p,n) */
    706730  }
    707   if (rField_is_GF(src))
     731  if (nField_is_GF(src))
    708732  {
    709733    int q=src->ch;
     
    738762    }
    739763  }
    740   if (rField_is_Zp(src,nfCharP))
     764  if (nField_is_Zp(src,nfCharP))
    741765  {
    742766    return nfMapP;    /* Z/p -> GF(p,n) */
  • coeffs/ffields.h

    rdc093ce r3510a6  
    1010#include "coeffs.h"
    1111
     12// #define MAX_INT_VAL 0x7fffffff
    1213
    1314BOOLEAN nfGreaterZero (number k, const coeffs r);
Note: See TracChangeset for help on using the changeset viewer.