Changeset abfc3b in git
- Timestamp:
- Feb 20, 2006, 4:00:59 PM (18 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 0b6919074bf78beca9b3294f6190ca7c2ff35518
- Parents:
- 4c80eb75301d34b598b209761a9ebbb6273460c5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/cf_gcd.cc
r4c80eb rabfc3b 1 1 /* emacs edit mode for this file is -*- C++ -*- */ 2 /* $Id: cf_gcd.cc,v 1. 39 2006-02-17 11:28:43Singular Exp $ */2 /* $Id: cf_gcd.cc,v 1.40 2006-02-20 15:00:59 Singular Exp $ */ 3 3 4 4 #include <config.h> … … 24 24 #endif 25 25 26 static CanonicalForm gcd_poly( const CanonicalForm & f, const CanonicalForm& g, bool modularflag );26 static CanonicalForm gcd_poly( const CanonicalForm & f, const CanonicalForm& g, const bool modularflag ); 27 27 static CanonicalForm cf_content ( const CanonicalForm & f, const CanonicalForm & g ); 28 28 … … 118 118 } 119 119 //}}} 120 121 //{{{ static CanonicalForm bcontent ( const CanonicalForm & f, const CanonicalForm & b )122 //{{{ docu123 //124 // bcontent() - return gcd of b and all coefficients of f which125 // are in a basic domain.126 //127 // Used by gcd().128 //129 //}}}130 static CanonicalForm131 bcontent ( const CanonicalForm & f, const CanonicalForm & c )132 {133 if ( f.inBaseDomain() )134 return bgcd( f, c );135 else if ( f.inCoeffDomain() )136 return f.genOne();137 else {138 CanonicalForm g = c;139 for ( CFIterator i = f; i.hasTerms() && ! g.isOne(); i++ )140 g = bcontent( i.coeff(), g );141 if( g.lc().sign() < 0 )142 return -g;143 else144 return g;145 }146 }147 //}}}148 149 120 150 121 //{{{ CanonicalForm icontent ( const CanonicalForm & f ) … … 357 328 358 329 CanonicalForm 359 gcd_poly1( const CanonicalForm & f, const CanonicalForm & g, bool modularflag )330 gcd_poly1( const CanonicalForm & f, const CanonicalForm & g, const bool modularflag ) 360 331 { 361 332 CanonicalForm pi, pi1; … … 431 402 int si_factor_reminder=1; 432 403 static CanonicalForm 433 gcd_poly ( const CanonicalForm & f, const CanonicalForm & g, bool modularflag ) 434 { 435 if ( getCharacteristic() != 0 ) { 436 if (! ( f.isUnivariate() && g.isUnivariate() ) ) { 437 CFMap M, N; 438 compress( f, g, M, N ); 439 CanonicalForm fM = M(f); 440 CanonicalForm gM = M(g); 441 if ( fM.mvar() != gM.mvar() ) { 442 if ( fM.mvar() > gM.mvar() ) 443 return N( cf_content( fM, gM ) ); 444 else 445 return N( cf_content( gM, fM ) ); 446 } 447 else 448 return N( gcd_poly1( fM, gM, false ) ); 449 } 450 else 451 return gcd_poly1( f, g, false ); 452 } 453 else if ( isOn( SW_USE_EZGCD ) && ! ( f.isUnivariate() && g.isUnivariate() ) ) { 404 gcd_poly ( const CanonicalForm & f, const CanonicalForm & g, const bool modularflag ) 405 { 406 if ( getCharacteristic() != 0 ) 407 { 408 if ( f.mvar() != g.mvar() ) 409 { 410 CFMap M, N; 411 compress( f, g, M, N ); 412 CanonicalForm fM = M(f); 413 CanonicalForm gM = M(g); 414 //if ( fM.mvar() != gM.mvar() ) 415 //{ 416 // 417 // if ( fM.mvar() > gM.mvar() ) 418 // return N( cf_content( fM, gM ) ); 419 // else 420 // return N( cf_content( gM, fM ) ); 421 //} 422 //else 423 return N( gcd_poly1( fM, gM, false ) ); 424 } 425 else 426 return gcd_poly1( f, g, false ); 427 } 428 else if ( isOn( SW_USE_EZGCD ) && ! ( f.isUnivariate() && g.isUnivariate() ) ) 429 { 454 430 CFMap M, N; 455 431 compress( f, g, M, N ); … … 516 492 } 517 493 else 518 {519 ASSERT(g==0,"invalid call of cf_gcd");520 494 if ( f.sign() < 0 ) 521 495 return -f; 522 496 else 523 497 return f; 524 }525 498 } 526 499 //}}} … … 613 586 { 614 587 if ( f.isZero() ) 615 { 616 if ( g.lc().sign() < 0 ) 617 return -g; 618 else 619 return g; 620 } 588 if ( g.lc().sign() < 0 ) 589 return -g; 590 else 591 return g; 621 592 else if ( g.isZero() ) 622 { 623 if ( f.lc().sign() < 0 ) 624 return -f; 625 else 626 return f; 627 } 593 if ( f.lc().sign() < 0 ) 594 return -f; 595 else 596 return f; 628 597 else if ( f.inBaseDomain() ) 629 return bcontent( g, f ); 598 if ( g.inBaseDomain() ) 599 return bgcd( f, g ); 600 else 601 return cf_content( g, f ); 630 602 else if ( g.inBaseDomain() ) 631 return bcontent( f, g );603 return cf_content( f, g ); 632 604 else if ( f.mvar() == g.mvar() ) 633 605 if ( f.inExtension() && getReduce( f.mvar() ) ) … … 652 624 CanonicalForm F = f * l, G = g * l; 653 625 Off( SW_RATIONAL ); 654 do { l = gcd_poly( F, G, true ); 655 //if ((!divides(l,F)) || (!divides(l,G))) 656 //{printf("fehler\n"); 657 //cout<<"F="<<F<<"\nG="<<G<<"wrong gcd="<<l<<"\n"; 658 //} 659 } 660 while (0); //((!divides(l,F)) || (!divides(l,G))); 626 do { l = gcd_poly( F, G, true ); } 627 while ((!divides(l,F)) || (!divides(l,G))); 661 628 On( SW_RATIONAL ); 662 629 if ( l.lc().sign() < 0 ) … … 667 634 else { 668 635 CanonicalForm d; 669 do{ d = gcd_poly( f, g, getCharacteristic()==0 ); 670 //if ((!divides(d,f)) || (!divides(d,g))) 671 //{printf("fehler2\n"); cout<<"F="<<f<<"\nG="<<g<<"wrong gcd="<<d<<"\n"; 672 //} 673 } 674 while (0);//((!divides(d,f)) || (!divides(d,g))); 636 do{ d = gcd_poly( f, g, getCharacteristic()==0 ); } 637 while ((!divides(d,f)) || (!divides(d,g))); 675 638 if ( d.lc().sign() < 0 ) 676 639 return -d;
Note: See TracChangeset
for help on using the changeset viewer.