Changeset c28ecf in git for libpolys/polys
- Timestamp:
- May 19, 2011, 2:52:08 PM (13 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b50cc4fc80fdf2a2005655a08d9229aa4b32d4a5')
- Children:
- 4a2260efc22c19ac8eaf58d529af8decbb9420bb
- Parents:
- f0b01f1bf67efed9ec49d9df0d55f75284f5d968
- git-author:
- Frank Seelisch <seelisch@mathematik.uni-kl.de>2011-05-19 14:52:08+02:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 12:36:12+01:00
- Location:
- libpolys/polys
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
libpolys/polys/ext_fields/algext.cc
rf0b01f rc28ecf 75 75 assume(getCoeffType(cf) == naID); 76 76 if (a == NULL) return TRUE; 77 p_Test((poly)a, naRing); // cannot use omCheckAddrSize(a, sizeof(*a)) here77 p_Test((poly)a, naRing); 78 78 assume(p_Deg((poly)a, naRing) <= p_Deg(naMinpoly, naRing)); 79 79 return TRUE; … … 90 90 } 91 91 92 void naDelete(number *a, const coeffs cf) 93 { 94 if (a == NULL) return; 95 p_Delete((poly *)a, naRing); 92 void naDelete(number * a, const coeffs cf) 93 { 94 if (*a == NULL) return; 95 poly aAsPoly = (poly)(*a); 96 p_Delete(&aAsPoly, naRing); 96 97 *a = NULL; 97 98 } … … 339 340 { 340 341 #ifdef LDEBUG 341 omCheckAddr(p); omCheckAddr(reducer); 342 p_Test((poly)p, naRing); 343 p_Test((poly)reducer, naRing); 342 344 #endif 343 345 if (p_Deg(p, naRing) > 10 * p_Deg(reducer, naRing)) … … 427 429 { 428 430 #ifdef LDEBUG 429 omCheckAddr(p); omCheckAddr(reducer); 431 p_Test((poly)p, naRing); 432 p_Test((poly)reducer, naRing); 430 433 #endif 431 434 p_PolyDiv(p, reducer, FALSE, naRing); … … 443 446 naTest(a); 444 447 if (a == NULL) WerrorS(nDivBy0); 445 poly aFactor ; poly mFactor;448 poly aFactor = NULL; poly mFactor = NULL; 446 449 poly theGcd = p_ExtGcd((poly)a, aFactor, naMinpoly, mFactor, naRing); 447 /* the gcd must be onesince naMinpoly is irreducible and a != NULL: */450 /* the gcd must be 1 since naMinpoly is irreducible and a != NULL: */ 448 451 assume(naIsOne((number)theGcd, cf)); 449 452 p_Delete(&theGcd, naRing); 450 453 p_Delete(&mFactor, naRing); 454 /* printf("naInvers\n"); 455 p_Write((poly)a, naRing); 456 p_Write(aFactor, naRing); */ 451 457 return (number)(aFactor); 452 458 } … … 566 572 567 573 #ifdef LDEBUG 568 omCheckAddr(naMinpoly);574 p_Test((poly)naMinpoly, naRing); 569 575 #endif 570 576 -
libpolys/polys/ext_fields/algext.h
rf0b01f rc28ecf 69 69 number naLcm(number a, number b, const coeffs cf); 70 70 number naSize(number a, const coeffs cf); 71 void naDelete(number * a, const coeffs cf);71 void naDelete(number * a, const coeffs cf); 72 72 void naCoeffWrite(const coeffs cf); 73 73 number naIntDiv(number a, number b, const coeffs cf); -
libpolys/polys/monomials/p_polys.cc
rf0b01f rc28ecf 1453 1453 int divisorLE = p_GetExp(divisor, 1, r); 1454 1454 //p_Write(p, r); p_Write(divisor, r); 1455 while ((p != NULL) && (p_Deg(p, r) > p_Deg(divisor, r)))1455 while ((p != NULL) && (p_Deg(p, r) >= p_Deg(divisor, r))) 1456 1456 { 1457 1457 /* determine t = LT(p) / LT(divisor) */ … … 1462 1462 p_SetExp(t, 1, e, r); 1463 1463 p_Setm(t, r); 1464 //printf("t\n"); p_Write(t, r);1465 1464 if (needResult) result = p_Add_q(result, p_Copy(t, r), r); 1466 //t = p_Mult_q(t, p_Copy(divisor, r), r); p_Write(t, r);1467 //t = p_Neg(t, r); p_Write(t, r);1468 //printf("p\n"); p_Write(p, r);1469 //t = p_Add_q(p, t, r); p_Write(t, r);1470 //p = t;1471 1465 p = p_Add_q(p, p_Neg(p_Mult_q(t, p_Copy(divisor, r), r), r), r); 1472 //printf("EXECUTION STOPPED\n"); while (1) { };1473 1466 } 1474 1467 n_Delete(&divisorLC, r->cf); 1468 //printf("p_PolyDiv result:\n"); 1469 //p_Write(result, r); 1475 1470 return result; 1471 } 1472 1473 /* returns NULL if p == NULL, otherwise makes p monic by dividing 1474 by its leading coefficient (only done if this is not already 1); 1475 this assumes that we are over a ground field so that division 1476 is well-defined; 1477 modifies p */ 1478 void p_Monic(poly &p, ring r) 1479 { 1480 if (p == NULL) return; 1481 poly pp = p; 1482 number lc = p_GetCoeff(p, r); 1483 if (n_IsOne(lc, r->cf)) return; 1484 number n = n_Init(1, r->cf); 1485 p_SetCoeff(p, n, r); 1486 p = pIter(p); 1487 while (p != NULL) 1488 { 1489 number c = p_GetCoeff(p, r); 1490 number n = n_Div(c, lc, r->cf); 1491 n_Delete(&c, r->cf); 1492 p_SetCoeff(p, n, r); 1493 p = pIter(p); 1494 } 1495 n_Delete(&lc, r->cf); 1496 p = pp; 1476 1497 } 1477 1498 … … 1481 1502 poly p_GcdHelper(poly &p, poly &q, ring r) 1482 1503 { 1483 if (q == NULL) return p; 1504 if (q == NULL) 1505 { 1506 /* We have to make p monic before we return it, so that if the 1507 gcd is a unit in the ground field, we will actually return 1. */ 1508 p_Monic(p, r); 1509 return p; 1510 } 1484 1511 else 1485 1512 { … … 1511 1538 ring r) 1512 1539 { 1513 //printf("p_ExtGcdHelper:\n");1514 1540 if (q == NULL) 1515 1541 { 1516 qFactor = NULL; pFactor = p_ISet(1, r); return p; 1542 qFactor = NULL; 1543 pFactor = p_ISet(1, r); 1544 number n = p_GetCoeff(pFactor, r); 1545 p_SetCoeff(pFactor, n_Invers(p_GetCoeff(p, r), r->cf), r); 1546 n_Delete(&n, r->cf); 1547 p_Monic(p, r); 1548 return p; 1517 1549 } 1518 1550 else 1519 1551 { 1552 //printf("p_ExtGcdHelper1:\n"); 1520 1553 //p_Write(p, r); p_Write(q, r); 1521 1554 poly pDivQ = p_PolyDiv(p, q, TRUE, r); 1522 poly ppFactor; poly qqFactor; 1523 poly theGcd = p_ExtGcdHelper(q, ppFactor, p, qqFactor, r); 1524 pFactor = qqFactor; 1525 qFactor = p_Add_q(ppFactor, 1526 p_Neg(p_Mult_q(pDivQ, p_Copy(qqFactor, r), r), r), 1555 poly ppFactor = NULL; poly qqFactor = NULL; 1556 //printf("p_ExtGcdHelper2:\n"); 1557 //p_Write(p, r); p_Write(ppFactor, r); 1558 //p_Write(q, r); p_Write(qqFactor, r); 1559 poly theGcd = p_ExtGcdHelper(q, qqFactor, p, ppFactor, r); 1560 //printf("p_ExtGcdHelper3:\n"); 1561 //p_Write(q, r); p_Write(qqFactor, r); 1562 //p_Write(p, r); p_Write(ppFactor, r); 1563 //p_Write(theGcd, r); 1564 pFactor = ppFactor; 1565 qFactor = p_Add_q(qqFactor, 1566 p_Neg(p_Mult_q(pDivQ, p_Copy(ppFactor, r), r), r), 1527 1567 r); 1568 //printf("p_ExtGcdHelper4:\n"); 1569 //p_Write(pFactor, r); p_Write(qFactor, r); 1528 1570 return theGcd; 1529 1571 } … … 1540 1582 poly p_ExtGcd(poly p, poly &pFactor, poly q, poly &qFactor, ring r) 1541 1583 { 1542 //printf("p_ExtGcd :\n");1584 //printf("p_ExtGcd1:\n"); 1543 1585 //p_Write(p, r); p_Write(q, r); 1544 1586 assume((p != NULL) || (q != NULL)); 1545 poly a = p; poly b = q; 1546 poly aFactor = pFactor; poly bFactor = qFactor; 1587 poly a = p; poly b = q; BOOLEAN aCorrespondsToP = TRUE; 1547 1588 if (p_Deg(a, r) < p_Deg(b, r)) 1548 { a = q; b = p; a Factor = qFactor, bFactor = pFactor; }1589 { a = q; b = p; aCorrespondsToP = FALSE; } 1549 1590 a = p_Copy(a, r); b = p_Copy(b, r); 1550 return p_ExtGcdHelper(a, aFactor, b, bFactor, r); 1591 poly aFactor = NULL; poly bFactor = NULL; 1592 poly theGcd = p_ExtGcdHelper(a, aFactor, b, bFactor, r); 1593 if (aCorrespondsToP) { pFactor = aFactor; qFactor = bFactor; } 1594 else { pFactor = bFactor; qFactor = aFactor; } 1595 return theGcd; 1551 1596 } 1552 1597 -
libpolys/polys/monomials/p_polys.h
rf0b01f rc28ecf 1839 1839 poly p_PolyDiv(poly &p, poly divisor, BOOLEAN needResult, ring r); 1840 1840 1841 /* returns NULL if p == NULL, otherwise makes p monic by dividing 1842 by its leading coefficient (only done if this is not already 1); 1843 this assumes that we are over a ground field so that division 1844 is well-defined; 1845 modifies p */ 1846 void p_Monic(poly &p, ring r); 1847 1841 1848 /* assumes that p and q are univariate polynomials in r, 1842 1849 mentioning the same variable;
Note: See TracChangeset
for help on using the changeset viewer.