Changeset e8a0aa in git


Ignore:
Timestamp:
Aug 6, 2008, 3:55:42 PM (16 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
3832e66fe9e1ccb1939127b0b8335291fee1bf4e
Parents:
ad8e1b0d640cd2aaf8929e7568cf730da7d7d683
Message:
*hannes: nlInpAdd


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

Legend:

Unmodified
Added
Removed
  • kernel/longrat.cc

    rad8e1b re8a0aa  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: longrat.cc,v 1.37 2008-07-24 13:36:16 Singular Exp $ */
     4/* $Id: longrat.cc,v 1.38 2008-08-06 13:55:41 Singular Exp $ */
    55/*
    66* ABSTRACT: computation with long rational numbers (Hubert Grassmann)
     
    11551155}
    11561156
     1157number nlShort(number x)
     1158{
     1159  if (mpz_cmp_ui(&x->z,(long)0)==0)
     1160  {
     1161    nlDelete(&x,currRing);
     1162    return INT_TO_SR(0);
     1163  }
     1164  return x;
     1165}
    11571166/*2
    11581167* simplify x
     
    16351644          {
    16361645            MP_INT x;
    1637             MP_INT y;
    16381646            mpz_init(&x);
    1639             mpz_init(&y);
     1647
    16401648            mpz_mul(&x,&b->z,&a->n);
    1641             mpz_mul(&y,&a->z,&b->n);
    1642             mpz_add(&u->z,&x,&y);
     1649            mpz_mul(&u->z,&a->z,&b->n);
     1650            mpz_add(&u->z,&u->z,&x);
    16431651            mpz_clear(&x);
    1644             mpz_clear(&y);
     1652
    16451653            if (mpz_cmp_ui(&u->z,(long)0)==0)
    16461654            {
     
    16631671          case 3: /* a:1 b:3 */
    16641672          {
    1665             MP_INT x;
    1666             mpz_init(&x);
    1667             mpz_mul(&x,&b->z,&a->n);
    1668             mpz_add(&u->z,&a->z,&x);
    1669             mpz_clear(&x);
     1673            mpz_mul(&u->z,&b->z,&a->n);
     1674            mpz_add(&u->z,&u->z,&a->z);
    16701675            if (mpz_cmp_ui(&u->z,(long)0)==0)
    16711676            {
     
    16941699          case 1:/* a:3, b:1 */
    16951700          {
    1696             MP_INT x;
    1697             mpz_init(&x);
    1698             mpz_mul(&x,&a->z,&b->n);
    1699             mpz_add(&u->z,&b->z,&x);
    1700             mpz_clear(&x);
     1701            mpz_mul(&u->z,&a->z,&b->n);
     1702            mpz_add(&u->z,&u->z,&b->z);
    17011703            if (mpz_cmp_ui(&u->z,(long)0)==0)
    17021704            {
     
    22492251{
    22502252  return (a==INT_TO_SR(0));
     2253  //return (mpz_cmp_si(&a->z,(long)0)==0);
    22512254}
    22522255
     
    23222325}
    23232326
     2327number nlShort(number x);
     2328
     2329LINLINE number nlInpAdd (number a, number b, const ring r)
     2330{
     2331  if (SR_HDL(a) & SR_HDL(b) & SR_INT)
     2332  {
     2333    int r=SR_HDL(a)+SR_HDL(b)-1;
     2334    if ( ((r << 1) >> 1) == r )
     2335      return (number)(long)r;
     2336    else
     2337      return nlRInit(SR_TO_INT(r));
     2338  }
     2339  // a=a+b
     2340  if (SR_HDL(b) & SR_INT)
     2341  {
     2342    switch (a->s)
     2343    {
     2344      case 0:
     2345      case 1:/* b:short, a:1 */
     2346      {
     2347        MP_INT x;
     2348        mpz_init(&x);
     2349        mpz_mul_si(&x,&a->n,SR_TO_INT(b));
     2350        mpz_add(&a->z,&a->z,&x);
     2351        mpz_clear(&x);
     2352        a->s = 0;
     2353        nlNormalize(a);
     2354        break;
     2355      }
     2356      case 3:
     2357      {
     2358        if ((long)b>0L)
     2359          mpz_add_ui(&a->z,&a->z,SR_TO_INT(b));
     2360        else
     2361          mpz_sub_ui(&a->z,&a->z,-SR_TO_INT(b));
     2362        a->s = 3;
     2363        a=nlShort(a);
     2364        break;
     2365      }
     2366    }
     2367    return a;
     2368  }
     2369  if (SR_HDL(a) & SR_INT)
     2370  {
     2371    number u=(number)omAllocBin(rnumber_bin);
     2372    #if defined(LDEBUG)
     2373    u->debug=123456;
     2374    #endif
     2375    mpz_init(&u->z);
     2376    switch (b->s)
     2377    {
     2378      case 0:
     2379      case 1:/* a:short, b:1 */
     2380      {
     2381        MP_INT x;
     2382        mpz_init(&x);
     2383
     2384        mpz_mul_si(&x,&b->n,SR_TO_INT(a));
     2385        mpz_add(&u->z,&b->z,&x);
     2386        mpz_clear(&x);
     2387        // result cannot be 0, if coeffs are normalized
     2388        mpz_init_set(&u->n,&b->n);
     2389        u->s = 0;
     2390        nlNormalize(u);
     2391        break;
     2392      }
     2393      case 3:
     2394      {
     2395        if ((long)a>0L)
     2396          mpz_add_ui(&u->z,&b->z,SR_TO_INT(a));
     2397        else
     2398          mpz_sub_ui(&u->z,&b->z,-SR_TO_INT(a));
     2399        // result cannot be 0, if coeffs are normalized
     2400        u->s = 3;
     2401        u=nlShort(u);
     2402        break;
     2403      }
     2404    }
     2405    #ifdef LDEBUG
     2406    nlTest(u);
     2407    #endif
     2408    return u;
     2409  }
     2410  else
     2411  {
     2412    switch (a->s)
     2413    {
     2414      case 0:
     2415      case 1:
     2416      {
     2417        switch(b->s)
     2418        {
     2419          case 0:
     2420          case 1: /* a:1 b:1 */
     2421          {
     2422            MP_INT x;
     2423            MP_INT y;
     2424            mpz_init(&x);
     2425            mpz_init(&y);
     2426            mpz_mul(&x,&b->z,&a->n);
     2427            mpz_mul(&y,&a->z,&b->n);
     2428            mpz_add(&a->z,&x,&y);
     2429            mpz_clear(&x);
     2430            mpz_clear(&y);
     2431            mpz_mul(&a->n,&a->n,&b->n);
     2432            a->s = 0;
     2433            break;
     2434          }
     2435          case 3: /* a:1 b:3 */
     2436          {
     2437            MP_INT x;
     2438            mpz_init(&x);
     2439            mpz_mul(&x,&b->z,&a->n);
     2440            mpz_add(&a->z,&a->z,&x);
     2441            mpz_clear(&x);
     2442            a->s = 0;
     2443            break;
     2444          }
     2445        } /*switch (b->s) */
     2446        nlNormalize(a);
     2447        break;
     2448      }
     2449      case 3:
     2450      {
     2451        switch(b->s)
     2452        {
     2453          case 0:
     2454          case 1:/* a:3, b:1 */
     2455          {
     2456            MP_INT x;
     2457            mpz_init(&x);
     2458            mpz_mul(&x,&a->z,&b->n);
     2459            mpz_add(&a->z,&b->z,&x);
     2460            mpz_clear(&x);
     2461            mpz_init_set(&a->n,&b->n);
     2462            a->s = 0;
     2463            nlNormalize(a);
     2464            break;
     2465          }
     2466          case 3:
     2467          {
     2468            mpz_add(&a->z,&a->z,&b->z);
     2469            a->s = 3;
     2470            a=nlShort(a);
     2471            break;
     2472          }
     2473        }
     2474        break;
     2475      }
     2476    }
     2477    #ifdef LDEBUG
     2478    nlTest(a);
     2479    #endif
     2480    return a;
     2481  }
     2482}
     2483
    23242484LINLINE number nlMult (number a, number b)
    23252485{
     
    23672527#ifndef P_NUMBERS_H
    23682528
    2369 void nlInpGcd(number &a, number b, ring r)
     2529void nlInpGcd(number &a, number b, const ring r)
    23702530{
    23712531  if ((SR_HDL(b)|SR_HDL(a))&SR_INT)
     
    23912551  }
    23922552}
    2393 void nlInpIntDiv(number &a, number b, ring r)
     2553void nlInpIntDiv(number &a, number b, const ring r)
    23942554{
    23952555  if ((SR_HDL(b)|SR_HDL(a))&SR_INT)
     
    24392599  }
    24402600}
    2441 void nlInpAdd(number &a, number b, ring r)
     2601void nlInpAdd_(number &a, number b, const ring r)
    24422602{
    24432603  // TODO
     
    24642624  }
    24652625}
    2466 void nlInpMult(number &a, number b, ring r)
     2626void nlInpMult(number &a, number b, const ring r)
    24672627{
    24682628  if (((SR_HDL(b)|SR_HDL(a))&SR_INT)
  • kernel/longrat.h

    rad8e1b re8a0aa  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: longrat.h,v 1.12 2008-07-16 12:41:33 wienand Exp $ */
     6/* $Id: longrat.h,v 1.13 2008-08-06 13:55:42 Singular Exp $ */
    77/*
    88* ABSTRACT: computation with long rational numbers
     
    102102
    103103// in-place operations
    104 void nlInpGcd(number &a, number b, ring r);
    105 void nlInpIntDiv(number &a, number b, ring r);
    106 void nlInpAdd(number &a, number b, ring r);
     104void nlInpGcd(number &a, number b, const ring r);
     105void nlInpIntDiv(number &a, number b, const ring r);
     106void nlInpAdd_(number &a, number b, const ring r);
     107LINLINE number   nlInpAdd(number la, number li, const ring r);
    107108void nlInpMult(number &a, number b, ring r);
    108109
  • kernel/numbers.cc

    rad8e1b re8a0aa  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: numbers.cc,v 1.17 2008-07-07 12:21:43 wienand Exp $ */
     4/* $Id: numbers.cc,v 1.18 2008-08-06 13:55:42 Singular Exp $ */
    55
    66/*
     
    8282  n_Delete(&a,r);
    8383  a=n;
     84}
     85number ndInpAdd(number &a, number b, const ring r)
     86{
     87  number n=n_Add(a,b,r);
     88  n_Delete(&a,r);
     89  a=n;
     90  return a;
    8491}
    8592
  • kernel/numbers.h

    rad8e1b re8a0aa  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: numbers.h,v 1.14 2008-07-07 12:21:43 wienand Exp $ */
     6/* $Id: numbers.h,v 1.15 2008-08-06 13:55:42 Singular Exp $ */
    77/*
    88* ABSTRACT: interface to coefficient aritmetics
     
    9393number ndCopy(number a);
    9494void   ndInpMult(number &a, number b, const ring r);
     95number ndInpAdd(number &a, number b, const ring r);
    9596
    9697#ifdef LDEBUG
  • kernel/p_Add_q__T.cc

    rad8e1b re8a0aa  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Add_q__T.cc,v 1.1.1.1 2003-10-06 12:15:58 Singular Exp $
     9 *  Version: $Id: p_Add_q__T.cc,v 1.2 2008-08-06 13:55:42 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  //t = n_Add(n1,n2, r);
     46  //n_Delete(&n1, r);
     47  t=n_InpAdd(n1,n2,r);
    4748  n_Delete(&n2, r);
    4849  q = p_LmFreeAndNext(q, r);
  • kernel/p_Numbers.h

    rad8e1b re8a0aa  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Numbers.h,v 1.3 2008-01-30 09:01:37 wienand Exp $
     9 *  Version: $Id: p_Numbers.h,v 1.4 2008-08-06 13:55:42 Singular Exp $
    1010 *******************************************************************/
    1111#ifndef P_NUMBERS_H
     
    2323//#define n_InpMult_FieldGeneral(n1, n2, r)   (r)->cf->nInpMult(n1, n2, r)
    2424#define n_InpMult_FieldGeneral(n1, n2, r)   ndInpMult(n1, n2, r)
     25#define n_InpAdd_FieldGeneral(n1, n2, r)    n1=ndInpAdd(n1, n2, r)
    2526
    2627#ifdef HAVE_RINGS
     
    3536//#define n_InpMult_RingGeneral(n1, n2, r)   (r)->cf->nInpMult(n1, n2, r)
    3637#define n_InpMult_RingGeneral(n1, n2, r)   ndInpMult(n1, n2, r)
     38#define n_InpAdd_FieldGeneral(n1, n2, r)    n1=ndInpAdd(n1, n2, r)
    3739#endif
    3840
     
    4749#define n_Sub_FieldZp(n1, n2, r)    npSubM(n1, n2)
    4850#define n_InpMult_FieldZp(n1, n2, r) n1=npMultM(n1, n2)
     51#define n_InpAdd_FieldZp(n1, n2, r)  n1=npAddM(n1, n2)
    4952
    5053#define DO_LINLINE
     
    5962#define n_Sub_FieldQ(n1, n2, r)    nlSub(n1, n2)
    6063#define n_InpMult_FieldQ(n1, n2, r) nlInpMult(n1, n2, r)
     64#define n_InpAdd_FieldQ(n1, n2, r)  n1=nlInpAdd(n1, n2, r)
    6165#endif
  • kernel/p_Procs_Generate.cc

    rad8e1b re8a0aa  
    88 *  Author:  obachman (Olaf Bachmann)
    99 *  Created: 8/00
    10  *  Version: $Id: p_Procs_Generate.cc,v 1.3 2007-05-10 08:12:42 wienand Exp $
     10 *  Version: $Id: p_Procs_Generate.cc,v 1.4 2008-08-06 13:55:42 Singular Exp $
    1111 *******************************************************************/
    1212
     
    6969}
    7070
    71 const char* macros_field[] = {"n_Copy","n_Delete", "n_Mult", "n_Add", "n_Sub", "n_IsZero", "n_Equal" , "n_Neg", "n_InpMult", NULL};
     71const char* macros_field[] = {"n_Copy","n_Delete", "n_Mult", "n_Add", "n_Sub", "n_IsZero", "n_Equal" , "n_Neg", "n_InpMult", "n_InpAdd", NULL};
    7272
    7373const char* macros_length[] =
Note: See TracChangeset for help on using the changeset viewer.