Changeset 78f221 in git
- Timestamp:
- Apr 11, 2000, 4:09:39 PM (24 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 3bc0f16ac223887f4e8bb9ba4e3072b558f9ffa1
- Parents:
- 9f609e6ca07c0e3f63333b218d600891d22bdd06
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/clapsing.cc
r9f609e6 r78f221 3 3 * Computer Algebra System SINGULAR * 4 4 ****************************************/ 5 // $Id: clapsing.cc,v 1.6 1 2000-04-04 12:48:33Singular Exp $5 // $Id: clapsing.cc,v 1.62 2000-04-11 14:09:39 Singular Exp $ 6 6 /* 7 7 * ABSTRACT: interface between Singular and factory … … 490 490 void singclap_divide_content ( poly f ) 491 491 { 492 if ( nGetChar() == 1 )493 setCharacteristic( 0 );494 else if ( nGetChar() == -1 )495 return; /* not implemented for R */496 else if ( nGetChar() < 0 )497 setCharacteristic( -nGetChar() );498 else if (currRing->parameter==NULL) /* not GF(q) */499 setCharacteristic( nGetChar() );500 else501 return; /* not implemented*/502 492 if ( f==NULL ) 503 493 { … … 509 499 return; 510 500 } 501 502 if (rField_is_Zp_a()) 503 { 504 setCharacteristic( -nGetChar() ); 505 } 506 else if (rField_is_Q_a()) 507 { 508 setCharacteristic( 0 ); 509 } 511 510 else 512 { 513 CFList L; 514 CanonicalForm g, h; 515 poly p = pNext(f); 516 517 // first attemp: find 2 smallest g: 518 519 number g1=pGetCoeff(f); 520 number g2=pGetCoeff(p); // p==pNext(f); 511 return; /* not implemented R, long R, long C, GF, Z/p */ 512 513 CFList L; 514 CanonicalForm g, h; 515 poly p = pNext(f); 516 517 // first attemp: find 2 smallest g: 518 519 number g1=pGetCoeff(f); 520 number g2=pGetCoeff(p); // p==pNext(f); 521 pIter(p); 522 int sz1=nSize(g1); 523 int sz2=nSize(g2); 524 if (sz1>sz2) 525 { 526 number gg=g1; 527 g1=g2; g2=gg; 528 int sz=sz1; 529 sz1=sz2; sz2=sz; 530 } 531 while (p!=NULL) 532 { 533 int n_sz=nSize(pGetCoeff(p)); 534 if (n_sz<sz1) 535 { 536 sz2=sz1; 537 g2=g1; 538 g1=pGetCoeff(p); 539 sz1=n_sz; 540 if (sz1<=3) break; 541 } 542 else if(n_sz<sz2) 543 { 544 sz2=n_sz; 545 g2=pGetCoeff(p); 546 sz2=n_sz; 547 } 521 548 pIter(p); 522 int sz1=nSize(g1); 523 int sz2=nSize(g2); 524 if (sz1>sz2) 525 { 526 number gg=g1; 527 g1=g2; g2=gg; 528 int sz=sz1; 529 sz1=sz2; sz2=sz; 530 } 531 while (p!=NULL) 532 { 533 int n_sz=nSize(pGetCoeff(p)); 534 if (n_sz<sz1) 535 { 536 sz2=sz1; 537 g2=g1; 538 g1=pGetCoeff(p); 539 sz1=n_sz; 540 if (sz1<=3) break; 541 } 542 else if(n_sz<sz2) 543 { 544 sz2=n_sz; 545 g2=pGetCoeff(p); 546 sz2=n_sz; 547 } 548 pIter(p); 549 } 550 FACTORY_ALGOUT( "G", ((lnumber)g1)->z ); 551 g = convSingTrClapP( ((lnumber)g1)->z ); 552 g = gcd( g, convSingTrClapP( ((lnumber)g2)->z )); 553 554 // second run: gcd's 555 556 p = f; 557 TIMING_START( contentTimer ); 558 while ( (p != NULL) && (g != 1) && ( g != 0)) 559 { 560 FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) ); 561 h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z ); 562 pIter( p ); 563 #ifdef FACTORY_GCD_STAT 564 // save g 565 CanonicalForm gOld = g; 566 #endif 567 568 #ifdef FACTORY_GCD_TEST 569 g = CFPrimitiveGcdUtil::gcd( g, h ); 570 #else 571 g = gcd( g, h ); 572 #endif 573 574 FACTORY_GCDSTAT( "gcnt:", gOld, h, g ); 575 FACTORY_CFTROUT( "g", g ); 576 L.append( h ); 577 } 578 TIMING_END( contentTimer ); 579 FACTORY_CONTSTAT( "cont:", g ); 549 } 550 if (sz1 > 4) return; // do only a simple gcd 551 FACTORY_ALGOUT( "G", ((lnumber)g1)->z ); 552 g = convSingTrClapP( ((lnumber)g1)->z ); 553 g = gcd( g, convSingTrClapP( ((lnumber)g2)->z )); 554 555 // second run: gcd's 556 557 p = f; 558 TIMING_START( contentTimer ); 559 while ( (p != NULL) && (g != 1) && ( g != 0)) 560 { 561 FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) ); 562 h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z ); 563 pIter( p ); 564 g = gcd( g, h ); 565 L.append( h ); 580 566 if (( g == 1 ) || (g == 0)) 581 567 { 582 568 pTest(f); 569 #ifdef LDEBUG 570 PrintS("=> gcd 0 in divide_content\n"); 571 #endif 583 572 return; 584 573 } 585 #ifdef LDEBUG586 else if ( g == 0 )587 {588 pTest(f);589 pWrite(f);590 PrintS("=> gcd 0 in divide_content\n");591 return;592 }593 #endif594 574 else 595 575 { … … 1291 1271 void singclap_algdividecontent ( alg f, alg g, alg &ff, alg &gg ) 1292 1272 { 1273 On(SW_USE_SPARSEMOD); 1293 1274 FACTORY_ALGOUT( "f", f ); 1294 1275 FACTORY_ALGOUT( "g", g ); … … 1310 1291 GCD=CFPrimitiveGcdUtil::gcd( F, G ); 1311 1292 #else 1312 GCD=gcd ( F, G );1293 GCD=gcd ( F, G ); 1313 1294 #endif 1314 1295 TIMING_END( algContentTimer ); … … 1317 1298 FACTORY_GCDSTAT( "acnt:", F, G, GCD ); 1318 1299 1319 if ( GCD!=1)1300 if ((GCD!=1) && (GCD != 0)) 1320 1301 { 1321 1302 ff= convClapASingA( F/ GCD ); … … 1339 1320 FACTORY_GCDSTAT( "acnt:", F, G, GCD ); 1340 1321 1341 if ( GCD!=1)1322 if ((GCD!=1) && (GCD != 0)) 1342 1323 { 1343 1324 ff= convClapPSingTr( F/ GCD );
Note: See TracChangeset
for help on using the changeset viewer.