Changeset 18057e in git


Ignore:
Timestamp:
Aug 7, 2008, 5:08:22 PM (16 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b52fc4b2495505785981d640dcf7eb3e456778ef')
Children:
7d5673edb9457db84ced21b03f6423a9104413ba
Parents:
a0b71b527941c4a45e7975e6d7bf905f19a33e87
Message:
*hannes: nlInpAdd etc.


git-svn-id: file:///usr/local/Singular/svn/trunk@10961 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/longrat.cc

    ra0b71b r18057e  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: longrat.cc,v 1.38 2008-08-06 13:55:41 Singular Exp $ */
     4/* $Id: longrat.cc,v 1.39 2008-08-07 15:08:22 Singular Exp $ */
    55/*
    66* ABSTRACT: computation with long rational numbers (Hubert Grassmann)
     
    11551155}
    11561156
    1157 number nlShort(number x)
    1158 {
     1157number nlShort1(number x) // assume x->s==0/1
     1158{
     1159  assume(x->s<2);
    11591160  if (mpz_cmp_ui(&x->z,(long)0)==0)
    11601161  {
     
    11621163    return INT_TO_SR(0);
    11631164  }
     1165  if (x->s<2)
     1166  {
     1167    if (mpz_cmp(&x->z,&x->n)==0)
     1168    {
     1169      nlDelete(&x,currRing);
     1170      return INT_TO_SR(1);
     1171    }
     1172  }
    11641173  return x;
    11651174}
    1166 /*2
    1167 * simplify x
    1168 */
    1169 void nlNormalize (number &x)
    1170 {
    1171   if ((SR_HDL(x) & SR_INT) ||(x==NULL))
    1172     return;
    1173 #ifdef LDEBUG
    1174   if (!nlTest(x)) { if (x->s!=3) x->s=1; return; }
    1175 #endif
    1176   if (x->s==3)
    1177   {
    1178     if (mpz_cmp_ui(&x->z,(long)0)==0)
    1179     {
    1180       nlDelete(&x,currRing);
    1181       x=INT_TO_SR(0);
    1182       return;
    1183     }
    1184     if (mpz_size1(&x->z)<=MP_SMALL)
     1175number nlShort3(number x) // assume x->s==3
     1176{
     1177  assume(x->s==3);
     1178  if (mpz_cmp_ui(&x->z,(long)0)==0)
     1179  {
     1180    nlDelete(&x,currRing);
     1181    return INT_TO_SR(0);
     1182  }
     1183  if (mpz_size1(&x->z)<=MP_SMALL)
     1184  {
     1185    if (x->s==3)
    11851186    {
    11861187      int ui=(int)mpz_get_si(&x->z);
     
    11901191        mpz_clear(&x->z);
    11911192        omFreeBin((ADDRESS)x, rnumber_bin);
    1192         x=INT_TO_SR(ui);
    1193         return;
    1194       }
    1195     }
     1193        return INT_TO_SR(ui);
     1194      }
     1195    }
     1196  }
     1197  return x;
     1198}
     1199/*2
     1200* simplify x
     1201*/
     1202void nlNormalize (number &x)
     1203{
     1204  if ((SR_HDL(x) & SR_INT) ||(x==NULL))
     1205    return;
     1206#ifdef LDEBUG
     1207  if (!nlTest(x)) { if (x->s!=3) x->s=1; return; }
     1208#endif
     1209  if (x->s==3)
     1210  {
     1211    x=nlShort3(x);
     1212    return;
    11961213  }
    11971214  else if (x->s==0)
     
    21982215#endif
    21992216
    2200 
    22012217/***************************************************************
    22022218 *
     
    23252341}
    23262342
    2327 number nlShort(number x);
     2343number nlShort1(number a);
     2344number nlShort3(number a);
    23282345
    23292346LINLINE number nlInpAdd (number a, number b, const ring r)
     
    23512368        mpz_clear(&x);
    23522369        a->s = 0;
    2353         nlNormalize(a);
     2370        a=nlShort1(a);
    23542371        break;
    23552372      }
     
    23612378          mpz_sub_ui(&a->z,&a->z,-SR_TO_INT(b));
    23622379        a->s = 3;
    2363         a=nlShort(a);
     2380        a=nlShort3(a);
     2381        //nlNormalize(a);
    23642382        break;
    23652383      }
     
    23882406        mpz_init_set(&u->n,&b->n);
    23892407        u->s = 0;
    2390         nlNormalize(u);
     2408        u=nlShort1(u);
    23912409        break;
    23922410      }
     
    23992417        // result cannot be 0, if coeffs are normalized
    24002418        u->s = 3;
    2401         u=nlShort(u);
     2419        u=nlShort3(u);
    24022420        break;
    24032421      }
     
    24442462          }
    24452463        } /*switch (b->s) */
    2446         nlNormalize(a);
     2464        a=nlShort1(a);
    24472465        break;
    24482466      }
     
    24612479            mpz_init_set(&a->n,&b->n);
    24622480            a->s = 0;
    2463             nlNormalize(a);
     2481            a=nlShort1(a);
    24642482            break;
    24652483          }
     
    24682486            mpz_add(&a->z,&a->z,&b->z);
    24692487            a->s = 3;
    2470             a=nlShort(a);
     2488            a=nlShort3(a);
    24712489            break;
    24722490          }
     
    25862604    }
    25872605    MPZ_DIV(&a->z,&a->z,&b->z);
    2588     if (mpz_size1(&a->z)<=MP_SMALL)
    2589     {
    2590       int ui=(int)mpz_get_si(&a->z);
    2591       if ((((ui<<3)>>3)==ui)
    2592       && (mpz_cmp_si(&a->z,(long)ui)==0))
    2593       {
    2594         mpz_clear(&a->z);
    2595         omFreeBin((ADDRESS)a, rnumber_bin);
    2596         a=INT_TO_SR(ui);
    2597       }
    2598     }
    2599   }
    2600 }
    2601 void nlInpAdd_(number &a, number b, const ring r)
    2602 {
    2603   // TODO
    2604   if ((SR_HDL(b)|SR_HDL(a))&SR_INT)
    2605   {
    2606     number n=nlGcd(a,b,r);
    2607     nlDelete(&a,r);
    2608     a=n;
    2609   }
    2610   else
    2611   {
    2612     mpz_gcd(&a->z,&a->z,&b->z);
    26132606    if (mpz_size1(&a->z)<=MP_SMALL)
    26142607    {
  • kernel/pInline2.h

    ra0b71b r18057e  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: pInline2.h,v 1.13 2008-06-10 10:17:32 motsak Exp $
     9 *  Version: $Id: pInline2.h,v 1.14 2008-08-07 15:08:22 Singular Exp $
    1010 *******************************************************************/
    1111#ifndef PINLINE2_H
     
    727727
    728728// returns p + m*q destroys p, const: q, m
    729 // this should be implemented more efficiently
    730729PINLINE2 poly p_Plus_mm_Mult_qq(poly p, poly m, poly q, int &lp, int lq,
    731730                                const ring r)
     
    736735#endif
    737736
     737#if 0
     738// this should be implemented more efficiently
    738739  poly res, last;
    739740  int shorter;
     
    747748  n_Delete(&n_neg, r);
    748749  return res;
     750#else
     751  p=p_Add_q(p,pp_Mult_mm(q,m,r),lp,lq,r); // assume length(q*m)==length(q)
     752  return p;
     753#endif
    749754}
    750755
  • kernel/p_Add_q__T.cc

    ra0b71b r18057e  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Add_q__T.cc,v 1.2 2008-08-06 13:55:42 Singular Exp $
     9 *  Version: $Id: p_Add_q__T.cc,v 1.3 2008-08-07 15:08:22 Singular Exp $
    1010 *******************************************************************/
    1111
     
    4343  n1 = pGetCoeff(p);
    4444  n2 = pGetCoeff(q);
    45   //t = n_Add(n1,n2, r);
    46   //n_Delete(&n1, r);
     45  #if 0
     46  t = n_Add(n1,n2, r);
     47  n_Delete(&n1, r);
     48  #else
    4749  t=n_InpAdd(n1,n2,r);
     50  #endif
    4851  n_Delete(&n2, r);
    4952  q = p_LmFreeAndNext(q, r);
  • kernel/p_kBucketSetLm__T.cc

    ra0b71b r18057e  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 12/00
    9  *  Version: $Id: p_kBucketSetLm__T.cc,v 1.4 2006-02-13 17:12:42 bricken Exp $
     9 *  Version: $Id: p_kBucketSetLm__T.cc,v 1.5 2008-08-07 15:08:22 Singular Exp $
    1010 *******************************************************************/
    1111#undef USE_COEF_BUCKETS
     
    7272          MULTIPLY_BUCKET(bucket,i);
    7373          number tn = pGetCoeff(p);
     74          #if 0
    7475          pSetCoeff0(p, n_Add(pGetCoeff(bucket->buckets[i]), tn, r));
    7576          n_Delete(&tn, r);
     77          #else
     78          pSetCoeff0(p, n_InpAdd(tn,pGetCoeff(bucket->buckets[i]), r));
     79          #endif
    7680          p = bucket->buckets[i];
    7781          pIter(bucket->buckets[i]);
Note: See TracChangeset for help on using the changeset viewer.