Changeset 964cd1 in git
- Timestamp:
- Mar 9, 2003, 9:52:43 AM (21 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 32f58cd398994310d68f0171a7b1eda5d17811ba
- Parents:
- 08405a9243e7a4046ddae06608507408e33cc842
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
r08405a r964cd1 1955 1955 1956 1956 1957 struct find_erg{ 1958 poly expand; 1959 int expand_length; 1960 int to_reduce_u; 1961 int to_reduce_l; 1962 int reduce_by;//index of reductor 1963 BOOLEAN fromS;//else from los 1964 1965 }; 1957 1966 1958 static int guess_quality(const red_object & p, calc_dat* c){ 1967 1959 //looks only on bucket … … 2310 2302 if(erg.reduce_by<0) break; 2311 2303 multi_reduction_lls_trick(los,losl,c,erg); 2312 //erweitern? muß noch implementiert werden 2304 int sum=0; 2305 BOOLEAN join=FALSE; 2306 for(i=erg.to_reduce_l;i<=erg.to_reduce_u;i++){ 2307 if(!los[i].sum) sum++; 2308 if (sum>=AC_NEW_MIN) {join=TRUE;break;} 2309 } 2310 2313 2311 int i; 2314 2312 int len; … … 2341 2339 nDelete(&coef); 2342 2340 los[i].p = kBucketGetLm(los[i].bucket); 2343 if(los[i].p!=NULL) 2344 if((i>0)&&(los[i-1].p!=NULL)&&(pLmEqual(los[i-1].p,los[i].p))) 2345 los[i].sev=los[i-1].sev; 2346 else 2347 los[i].sev=pGetShortExpVector(los[i].p); 2341 // if(los[i].p!=NULL) 2342 // if((i>0)&&(los[i-1].p!=NULL)&&(pLmEqual(los[i-1].p,los[i].p))) 2343 // los[i].sev=los[i-1].sev; 2344 // else 2345 // los[i].sev=pGetShortExpVector(los[i].p); 2346 los[i].validate(); 2348 2347 //better would be first sorting before sev 2349 2348 } … … 2402 2401 flatten(); 2403 2402 p=kBucketGetLm(bucket); 2403 sev=pGetShortExpVector(p); 2404 2404 } 2405 2405 else 2406 2406 { 2407 2407 2408 p=lm_ac; 2409 assume(sum->ac->sev==pGetShortExpVector(p)); 2410 sev=sum->ac->sev; 2408 2411 } 2409 2412 2410 2413 } 2411 else 2414 else{ 2412 2415 p=kBucketGetLm(bucket); 2413 2416 sev=pGetShortExpVector(p); 2417 } 2414 2418 } 2415 2419 int red_object::clear_to_poly(){ … … 2422 2426 { 2423 2427 //we have to add support later for building new sums at this points, this involves a change in the interface 2424 if(this->sum==NULL)2425 kBucketPolyRed(this->bucket,reductor_full,2426 full_len,2427 c->strat->kNoether);2428 else2429 {2430 assume(sum->ac!=NULL);2431 if(sum->ac->last_reduction_id!=reduction_id){2432 2433 2434 2435 2436 2437 number n1=kBucketPolyRed(sum->ac->bucket,reductor_full, full_len, c->strat->kNoether);2438 number n2=nMult(n1,sum->ac->multiplied);2439 nDelete(&sum->ac->multiplied);2440 nDelete(&n1);2441 sum->ac->multiplied=n2;2442 }2443 //reduce and adjust multiplied2444 sum->ac->last_reduction_id=reduction_id;2445 2446 }2447 2448 2428 2449 2429 } … … 2480 2460 return s; 2481 2461 } 2462 void reduction_step::reduce(red_object* r, int l, int u){} 2463 void simple_reducer::reduce(red_object* r, int l, int u){ 2464 int i; 2465 for(i=l;i<=u;i++){ 2466 if(r[i].sum==NULL) 2467 kBucketPolyRed(r[i].bucket,p, 2468 p_len, 2469 c->strat->kNoether); 2470 else 2471 { 2472 assume(r[i].sum->ac!=NULL); 2473 if(r[i].sum->ac->last_reduction_id!=reduction_id){ 2474 number n1=kBucketPolyRed(r[i].sum->ac->bucket,p, p_len, c->strat->kNoether); 2475 number n2=nMult(n1,r[i].sum->ac->multiplied); 2476 nDelete(&r[i].sum->ac->multiplied); 2477 nDelete(&n1); 2478 r[i].sum->ac->multiplied=n2; 2479 } 2480 //reduce and adjust multiplied 2481 r[i].sum->ac->last_reduction_id=reduction_id; 2482 2483 } 2484 2485 } 2486 for(i=l;i<=u;i++) 2487 r[i].validate(); 2488 } 2489 reduction_step::~reduction_step(){} 2490 simple_reducer::~simple_reducer(){ 2491 if(fill_back!=NULL) 2492 { 2493 kBucketInit(fill_back,p,p_len); 2494 } 2495 2496 } 2497 void finalize_reduction_step(reduction_step* r){ 2498 delete r; 2499 } 2500 reduction_step* create_reduction_step(find_erg & erg, red_object* r, calc_dat* c){ 2501 static int id=0; 2502 id++; 2503 2504 simple_reducer* pointer= new simple_reducer(); 2505 2506 if (erg.fromS){ 2507 pointer->p=c->strat->S[erg.reduce_by]; 2508 pointer->p_len=c->strat->lenS[erg.reduce_by]; 2509 pointer->fill_back=NULL; 2510 } 2511 else 2512 { 2513 kBucket_pt bucket=r[erg.reduce_by].bucket; 2514 kBucketClear(bucket,&pointer->p,&pointer->p_len); 2515 2516 pointer->fill_back=bucket; 2517 } 2518 2519 pointer->reduction_id=id; 2520 pointer->c=c; 2521 2522 return pointer; 2523 }; -
Singular/tgb.h
r08405a r964cd1 25 25 #define REDTAIL_S 26 26 #define PAR_N 1000 27 #define AC_NEW_MIN 5 27 28 //#define REDTAIL_PROT 28 29 //#define QUICK_SPOLY_TEST … … 48 49 ///the polynomial data 49 50 kBucket_pt bucket; 51 /// the short exponent vector 52 unsigned long sev; 50 53 /// the reference counter 51 54 int counter; … … 115 118 void flatten(); 116 119 void validate(); 117 void red _object::reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c);120 void reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c); 118 121 void adjust_coefs(number c_r, number c_ac_r); 119 122 int guess_quality(calc_dat* c); 120 int red_object::clear_to_poly();123 int clear_to_poly(); 121 124 }; 122 125 … … 164 167 static sorted_pair_node* top_pair(calc_dat* c); 165 168 static int quality(poly p, int len, calc_dat* c); 166 169 /** 170 makes on each red_object in a region a single_step 171 **/ 172 class reduction_step{ 173 public: 174 /// we assume hat all occuring red_objects have same lm, and all 175 /// occ. lm's in r[l...u] are the same, only reductor does not occur 176 virtual void reduce(red_object* r, int l, int u); 177 //int reduction_id; 178 virtual ~reduction_step(); 179 calc_dat* c; 180 int reduction_id; 181 }; 182 class simple_reducer:public reduction_step{ 183 public: 184 poly p; 185 kBucket_pt fill_back; 186 int p_len; 187 188 void reduce(red_object* r, int l, int u); 189 ~simple_reducer(); 190 }; 191 //class sum_canceling_reducer:public reduction_step { 192 // void reduce(red_object* r, int l, int u); 193 //}; 194 struct find_erg{ 195 poly expand; 196 int expand_length; 197 int to_reduce_u; 198 int to_reduce_l; 199 int reduce_by;//index of reductor 200 BOOLEAN fromS;//else from los 201 202 }; 203 204 reduction_step* create_reduction_step(find_erg & erg, red_object* r, calc_dat* c); 167 205 #endif
Note: See TracChangeset
for help on using the changeset viewer.