Ignore:
Timestamp:
Sep 4, 2013, 5:33:28 PM (11 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
96847c7348e137cdf7a7b5a6ae39fb69f9104ed3a009faa5fdde26a448e61937ef0e92779f9a83a6
Parents:
8243aa7b444fb1e2e7a9c62630c681e5d778193c0b8402984cde399f7cfc35b9e16b563913f207e1
Message:
Merge pull request #355 from jankoboehm/spielwiese

Changes/additions to transext.cc

TODO: add tests for all the new features
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/ext_fields/transext.cc

    r8243aa r3068e8  
    3333*           TODO: the description above needs a major update!!!
    3434*/
     35
     36
     37
     38
     39
    3540#define TRANSEXT_PRIVATES
    3641
     
    6772#define ADD_COMPLEXITY 1   /**< complexity increase due to + and - */
    6873#define MULT_COMPLEXITY 2   /**< complexity increase due to * and / */
     74#define DIFF_COMPLEXITY 2   /**< complexity increase due to * and / */
    6975#define BOUND_COMPLEXITY 10   /**< maximum complexity of a number */
    7076
     
    740746*/
    741747}
     748
     749number ntDiff(number a, number d, const coeffs cf)
     750{
     751  ntTest(a);
     752  ntTest(d);
     753
     754  fraction t = (fraction) d;
     755  if (IS0(d))
     756  {
     757    WerrorS("ringvar expected");
     758    return NULL;
     759  }
     760  if (!DENIS1(t))
     761  {
     762    WerrorS("expected differentiation by a variable");
     763    return a;
     764  }
     765  int k=p_Var(NUM(t),ntRing);
     766  if (k==0)
     767  {
     768    WerrorS("expected differentiation by a variable");
     769    return a;
     770  }
     771
     772  if (IS0(a)) return ntCopy(a, cf);
     773
     774  fraction fa = (fraction)a;
     775  if (DENIS1(fa)) {
     776
     777     fraction result = (fraction)omAlloc0Bin(fractionObjectBin);
     778     NUM(result) = p_Diff(NUM(fa),k,ntRing);
     779     DEN(result) = NULL;
     780     COM(result) = COM(fa);
     781     return (number)result;
     782  }
     783
     784  fraction result = (fraction)omAlloc0Bin(fractionObjectBin);
     785  poly fg = p_Mult_q(p_Copy(DEN(fa),ntRing),p_Diff(NUM(fa),k,ntRing),ntRing);
     786  poly gf = p_Mult_q(p_Copy(NUM(fa),ntRing),p_Diff(DEN(fa),k,ntRing),ntRing);
     787  NUM(result) = p_Sub(fg,gf,ntRing);
     788  if (NUM(result)==NULL) return(NULL);
     789  DEN(result) = pp_Mult_qq(DEN(fa), DEN(fa), ntRing);
     790  COM(result) = COM(fa) + COM(fa) + DIFF_COMPLEXITY;
     791  heuristicGcdCancellation((number)result, cf);
     792
     793  return (number)result;
     794}
     795
    742796
    743797number ntAdd(number a, number b, const coeffs cf)
Note: See TracChangeset for help on using the changeset viewer.