Changeset 7938a0f in git
- Timestamp:
- Jan 31, 2012, 6:42:26 PM (11 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- 951db29edc9cda82b668de29b5733c1ca8ed44b6
- Parents:
- bd795d65c1de21a3593013aca57c80f6128ba318
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iparith.cc
rbd795d r7938a0f 1590 1590 x[i]=nlInit(0); 1591 1591 } 1592 number n=n lChineseRemainder(x,q,rl);1592 number n=n_ChineseRemainder(x,q,rl,currRing->cf); 1593 1593 for(i=rl-1;i>=0;i--) 1594 1594 { … … 1611 1611 static BOOLEAN jjCHINREM_ID(leftv res, leftv u, leftv v) 1612 1612 { 1613 if ((currRing==NULL) || rField_is_Q(currRing)) 1614 { 1615 lists c=(lists)u->CopyD(); // list of ideal 1616 lists pl=NULL; 1617 intvec *p=NULL; 1618 if (v->Typ()==LIST_CMD) pl=(lists)v->Data(); 1619 else p=(intvec*)v->Data(); 1620 int rl=c->nr+1; 1621 ideal result; 1622 ideal *x=(ideal *)omAlloc(rl*sizeof(ideal)); 1623 int i; 1624 int return_type=c->m[0].Typ(); 1625 if ((return_type!=IDEAL_CMD) 1626 && (return_type!=MODUL_CMD) 1627 && (return_type!=MATRIX_CMD)) 1628 { 1629 WerrorS("ideal/module/matrix expected"); 1613 lists c=(lists)u->CopyD(); // list of ideal 1614 lists pl=NULL; 1615 intvec *p=NULL; 1616 if (v->Typ()==LIST_CMD) pl=(lists)v->Data(); 1617 else p=(intvec*)v->Data(); 1618 int rl=c->nr+1; 1619 ideal result; 1620 ideal *x=(ideal *)omAlloc(rl*sizeof(ideal)); 1621 int i; 1622 int return_type=c->m[0].Typ(); 1623 if ((return_type!=IDEAL_CMD) 1624 && (return_type!=MODUL_CMD) 1625 && (return_type!=MATRIX_CMD)) 1626 { 1627 WerrorS("ideal/module/matrix expected"); 1628 omFree(x); // delete c 1629 return TRUE; 1630 } 1631 for(i=rl-1;i>=0;i--) 1632 { 1633 if (c->m[i].Typ()!=return_type) 1634 { 1635 Werror("%s expected at pos %d",Tok2Cmdname(return_type),i+1); 1630 1636 omFree(x); // delete c 1631 1637 return TRUE; 1632 1638 } 1639 x[i]=((ideal)c->m[i].Data()); 1640 } 1641 number *q=(number *)omAlloc(rl*sizeof(number)); 1642 if (p!=NULL) 1643 { 1633 1644 for(i=rl-1;i>=0;i--) 1634 1645 { 1635 if (c->m[i].Typ()!=return_type) 1636 { 1637 Werror("%s expected at pos %d",Tok2Cmdname(return_type),i+1); 1646 q[i]=n_Init((*p)[i], currRing->cf); 1647 } 1648 } 1649 else 1650 { 1651 for(i=rl-1;i>=0;i--) 1652 { 1653 if (pl->m[i].Typ()==INT_CMD) 1654 { 1655 q[i]=n_Init((int)(long)pl->m[i].Data(),currRing->cf); 1656 } 1657 else if (pl->m[i].Typ()==BIGINT_CMD) 1658 { 1659 q[i]=n_Init_bigint((number)(pl->m[i].Data()),coeffs_BIGINT,currRing->cf); 1660 } 1661 else 1662 { 1663 Werror("bigint expected at pos %d",i+1); 1664 for(i++;i<rl;i++) 1665 { 1666 n_Delete(&(q[i]),currRing->cf); 1667 } 1638 1668 omFree(x); // delete c 1669 omFree(q); // delete pl 1639 1670 return TRUE; 1640 1671 } 1641 x[i]=((ideal)c->m[i].Data()); 1642 } 1643 number *q=(number *)omAlloc(rl*sizeof(number)); 1644 if (p!=NULL) 1645 { 1646 for(i=rl-1;i>=0;i--) 1647 { 1648 q[i]=n_Init((*p)[i], currRing->cf); 1649 } 1650 } 1651 else 1652 { 1653 for(i=rl-1;i>=0;i--) 1654 { 1655 if (pl->m[i].Typ()==INT_CMD) 1656 { 1657 q[i]=n_Init((int)(long)pl->m[i].Data(),currRing->cf); 1658 } 1659 else if (pl->m[i].Typ()==BIGINT_CMD) 1660 { 1661 q[i]=n_Copy((number)(pl->m[i].Data()),coeffs_BIGINT); 1662 } 1663 else 1664 { 1665 Werror("bigint expected at pos %d",i+1); 1666 for(i++;i<rl;i++) 1667 { 1668 n_Delete(&(q[i]),currRing->cf); 1669 } 1670 omFree(x); // delete c 1671 omFree(q); // delete pl 1672 return TRUE; 1673 } 1674 } 1675 } 1676 result=id_ChineseRemainder(x,q,rl,currRing); 1677 for(i=rl-1;i>=0;i--) 1678 { 1679 n_Delete(&(q[i]),coeffs_BIGINT); 1680 } 1681 omFree(q); 1682 res->data=(char *)result; 1683 res->rtyp=return_type; 1684 return FALSE; 1685 } 1686 else return TRUE; 1672 } 1673 } 1674 result=id_ChineseRemainder(x,q,rl,currRing); 1675 for(i=rl-1;i>=0;i--) 1676 { 1677 n_Delete(&(q[i]),currRing->cf); 1678 } 1679 omFree(q); 1680 res->data=(char *)result; 1681 res->rtyp=return_type; 1682 return FALSE; 1687 1683 } 1688 1684 #endif -
kernel/ideals.cc
rbd795d r7938a0f 2593 2593 } 2594 2594 2595 number n=n ChineseRemainder(x,q,rl, R->cf);2595 number n=n_ChineseRemainder(x,q,rl, R->cf); 2596 2596 2597 2597 for(j=rl-1;j>=0;j--) -
libpolys/coeffs/coeffs.h
rbd795d r7938a0f 163 163 number (*cfGcd)(number a, number b, const coeffs r); 164 164 number (*cfLcm)(number a, number b, const coeffs r); 165 number (*cfChineseRemainder)(number *a, number *b, int rl, const coeffs r);166 number (*cfFarey)(number a, number b, const coeffs r);167 165 void (*cfDelete)(number * a, const coeffs r); 168 166 nMapFunc (*cfSetMap)(const coeffs src, const coeffs dst); … … 178 176 /// TODO: to be exchanged with a map!!! 179 177 number (*cfInit_bigint)(number i, const coeffs dummy, const coeffs dst); 178 179 /// rational reconstruction: best rational with mod p=n 180 number (*cfFarey)(number p, number n, const coeffs); 181 182 /// chinese remainder 183 /// returns X with X mod q[i]=x[i], i=0..rl-1 184 number (*cfChineseRemainder)(number *x, number *q,int rl, const coeffs); 180 185 181 186 #ifdef HAVE_FACTORY … … 596 601 { 597 602 assume(r != NULL); 598 assume(getCoeffType(r)==n_Q);599 603 return r->cfChineseRemainder(a,b,rl,r); 600 604 } … … 603 607 { 604 608 assume(r != NULL); 605 assume(getCoeffType(r)==n_Q);606 609 return r->cfFarey(a,b,r); 607 610 } -
libpolys/coeffs/numbers.cc
rbd795d r7938a0f 76 76 #endif 77 77 78 number ndFarey(number,number,const coeffs r) 79 { 80 Werror("farey not implemented for (c=%d)",getCoeffType(r)); 81 return NULL; 82 } 83 number ndChineseRemainder(number *,number *,int,const coeffs r) 84 { 85 Werror("ChineseRemainder not implemented for (c=%d)",getCoeffType(r)); 86 return n_Init(0,r); 87 } 88 78 89 79 90 BOOLEAN n_IsZeroDivisor( number a, const coeffs r) … … 121 132 number nd_Copy(number a, const coeffs r) { return n_Copy(a, r); } 122 133 123 number ndChineseRemainder(number *,number *,int,const coeffs r){ return n_Init(0,r); }124 134 #ifdef HAVE_RINGS 125 135 BOOLEAN ndDivBy(number, number, const coeffs) { return TRUE; } // assume a,b !=0 … … 241 251 242 252 n->cfChineseRemainder = ndChineseRemainder; 243 n->cfFarey = nd Gcd;253 n->cfFarey = ndFarey; 244 254 245 255 #ifdef HAVE_RINGS
Note: See TracChangeset
for help on using the changeset viewer.