source: git/kernel/digitech.cc @ f3a8c2e

spielwiese
Last change on this file since f3a8c2e was ec8a6b6, checked in by Hans Schönemann <hannes@…>, 19 years ago
*hannes: om(re)alloc -> om(Re)Alloc MACROS git-svn-id: file:///usr/local/Singular/svn/trunk@8124 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.6 KB
Line 
1#include "digitech.h"
2#include "kbuckets.h"
3#include "ideals.h"
4static ideal zero_ideal;
5void bit_reduce(poly & f,ring r){
6  poly p=f;
7  kBucket_pt erg_bucket= kBucketCreate(r);
8  kBucketInit(erg_bucket,NULL,0 /*pLength(P.p)*/);
9  while(p){
10    poly next=pNext(p);
11    pNext(p)=NULL;
12
13    int i;
14    int max=rVar(r);
15    for(i=1;i<=max;i++){
16      unsigned long exp=p_GetExp(p,i,r);
17      if(exp!=0)
18        p_SetExp(p,i,1,r);
19     
20    }
21    p_Setm(p,r);
22    int pseudo_len=0;
23    kBucket_Add_q(erg_bucket,p,&pseudo_len);
24    p=next;
25  }
26
27  int len=0;
28  poly erg;
29  kBucketClear(erg_bucket,&erg, &len);
30  kBucketDestroy(&erg_bucket);
31  f=erg;
32}
33poly uni_subst_bits(poly outer_uni, poly inner_multi, ring r){
34  zero_ideal=idInit(0,1);
35  //assumes outer_uni is univariate and ordering global
36  int d_max=p_GetExp(outer_uni,1,r);
37  poly* potences=(poly*) omalloc((d_max+1)*sizeof(poly));
38  potences[0]=p_ISet(1,r);
39  int i;
40  for(i=1;i<=d_max;i++){
41    potences[i]=pp_Mult_qq(potences[i-1],inner_multi,r);
42    bit_reduce(potences[i],r);
43  }
44
45  poly p=outer_uni;
46  kBucket_pt erg_bucket= kBucketCreate(r);
47  kBucketInit(erg_bucket,NULL,0 /*pLength(P.p)*/);
48
49
50  while(p){
51    int d=p_GetExp(p,1,r);
52    assume(potences[d]!=NULL); //mustn't always hold, but for most input
53    int pseudo_len=0;
54    kBucket_Add_q(erg_bucket,p_Mult_nn(potences[d],p_GetCoeff(p,r),r),&pseudo_len);
55    potences[d]=NULL;
56    p=pNext(p);
57  }
58
59
60
61
62  //free potences
63  for(i=0;i<=d_max;i++){
64    p_Delete(&potences[i],r);
65  }
66  omfree(potences);
67  int len=0;
68  poly erg;
69  kBucketClear(erg_bucket,&erg, &len);
70  kBucketDestroy(&erg_bucket);
71  return(erg);
72}
Note: See TracBrowser for help on using the repository browser.