Changeset e475e3 in git
- Timestamp:
- Aug 7, 2009, 1:13:40 PM (14 years ago)
- Branches:
- (u'spielwiese', '91fdef05f09f54b8d58d92a472e9c4a43aa4656f')
- Children:
- b87da29e3432134ed69cb9775567c9df1a4b2b5e
- Parents:
- 89314848080dc671e1de502749b8f7a2b6fc2302
- Location:
- kernel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/longalg.cc
r893148 re475e3 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: longalg.cc,v 1.4 2 2009-08-06 16:35:56Singular Exp $ */4 /* $Id: longalg.cc,v 1.43 2009-08-07 11:13:40 Singular Exp $ */ 5 5 /* 6 6 * ABSTRACT: algebraic numbers … … 48 48 static number (*nacGcd)(number a, number b, const ring r); 49 49 static number (*nacLcm)(number a, number b, const ring r); 50 static void (*nacDelete)(number *a, const ring r);51 50 number (*nacInit)(int i); 52 51 static int (*nacInt)(number &n); … … 66 65 static int napExpi(int i, napoly a, napoly b); 67 66 static ring nacRing; 68 #define NA_NORMALIZE_CNT 569 static inline void naNormalize0(number &pp)70 {71 lnumber p = (lnumber)pp;72 if ((p!=NULL) && (p->z!=NULL))73 {74 p->cnt++;75 if ((p->cnt>NA_NORMALIZE_CNT)76 //|| (currRing->minpoly!=NULL)77 //|| ((p->n!=NULL) && (p->cnt>1))78 )79 naNormalize(pp);80 }81 }82 67 83 68 #define napCopy(p) (napoly)p_Copy((poly)p,nacRing) … … 152 137 nacGcd = nacRing->cf->nGcd; 153 138 nacLcm = nacRing->cf->nLcm; 154 nacDelete = nacRing->cf->cfDelete;155 139 nacMult = nacRing->cf->nMult; 156 140 nacDiv = nacRing->cf->nDiv; … … 178 162 179 163 #define napInit(i) (napoly)p_ISet(i,nacRing) 180 #define napSetCoeff(p,n) {nacDelete(&napGetCoeff(p),nacRing);napGetCoeff(p)=n;}164 #define napSetCoeff(p,n) p_SetCoeff(p,n,nacRing); 181 165 #define napDelete1(p) p_LmDelete((poly *)p, nacRing) 182 166 #define nap_Copy(p,r) (napoly)p_Copy((poly)p,r->algring) … … 230 214 napMultT(h, qq); 231 215 napNormalize(h); 232 n acDelete(&napGetCoeff(qq),nacRing);216 n_Delete(&napGetCoeff(qq),nacRing); 233 217 a = napAdd(a, h); 234 218 } … … 261 245 napMultT(h, qq); 262 246 napNormalize(h); 263 n acDelete(&napGetCoeff(qq),nacRing);247 n_Delete(&napGetCoeff(qq),nacRing); 264 248 a = napAdd(a, h); 265 249 } … … 291 275 t = nacInvers(napGetCoeff(x)); 292 276 nacNormalize(t); 293 n acDelete(&napGetCoeff(x),nacRing);277 n_Delete(&napGetCoeff(x),nacRing); 294 278 napGetCoeff(x) = t; 295 279 } … … 309 293 t = nacNeg(t); 310 294 qa=p_Mult_nn(qa,t,nacRing); p_Normalize(qa,nacRing); 311 n acDelete(&t,nacRing);295 n_Delete(&t,nacRing); 312 296 napNormalize(qa); 313 297 napDelete(&x); … … 330 314 q=p_Mult_nn(q,t,nacRing); p_Normalize(q,nacRing); 331 315 napNormalize(q); 332 n acDelete(&t,nacRing);316 n_Delete(&t,nacRing); 333 317 napDelete(&x); 334 318 napDelete(&r); … … 359 343 q=p_Mult_nn(q,t,nacRing); p_Normalize(q,nacRing); 360 344 napNormalize(q); 361 n acDelete(&t,nacRing);345 n_Delete(&t,nacRing); 362 346 napDelete(&x); 363 347 napDelete(&r); … … 610 594 if(nacIsOne(d)) 611 595 { 612 n acDelete(&h,nacRing);613 n acDelete(&d,nacRing);596 n_Delete(&h,nacRing); 597 n_Delete(&d,nacRing); 614 598 return; 615 599 } 616 n acDelete(&h,nacRing);600 n_Delete(&h,nacRing); 617 601 h = d; 618 602 napIter(p); … … 620 604 while (p!=NULL); 621 605 h = nacInvers(d); 622 n acDelete(&d,nacRing);606 n_Delete(&d,nacRing); 623 607 p = ph; 624 608 while (p!=NULL) 625 609 { 626 610 d = nacMult(napGetCoeff(p), h); 627 n acDelete(&napGetCoeff(p),nacRing);611 n_Delete(&napGetCoeff(p),nacRing); 628 612 napGetCoeff(p) = d; 629 613 napIter(p); 630 614 } 631 n acDelete(&h,nacRing);615 n_Delete(&h,nacRing); 632 616 } 633 617 … … 644 628 { 645 629 d = nacLcm(h, napGetCoeff(p), nacRing); 646 n acDelete(&h,nacRing);630 n_Delete(&h,nacRing); 647 631 h = d; 648 632 napIter(p); … … 652 636 p = ph; 653 637 p=p_Mult_nn(p,h,nacRing);p_Normalize(p,nacRing); 654 n acDelete(&h,nacRing);638 n_Delete(&h,nacRing); 655 639 } 656 640 napContent(ph); … … 669 653 napIter(a); 670 654 y = nacGcd(x, napGetCoeff(a), nacRing); 671 n acDelete(&x,nacRing);655 n_Delete(&x,nacRing); 672 656 x = y; 673 657 if (nacIsOne(x)) … … 677 661 { 678 662 y = nacGcd(x, napGetCoeff(b), nacRing); 679 n acDelete(&x,nacRing);663 n_Delete(&x,nacRing); 680 664 x = y; 681 665 if (nacIsOne(x)) … … 784 768 { 785 769 d = nacLcm(h, napGetCoeff(b), nacRing); 786 n acDelete(&h,nacRing);770 n_Delete(&h,nacRing); 787 771 h = d; 788 772 napIter(b); … … 894 878 l->s = 2; 895 879 l->n = NULL; 896 l->cnt=0;897 880 return (number)l; 898 881 } … … 910 893 p_Setm(l->z,nacRing); 911 894 l->n = NULL; 912 l->cnt=0;913 895 return (number)l; 914 896 } … … 932 914 lnumber l = (lnumber)n; 933 915 if (l==NULL) return -1; 934 if (l->cnt>0) naNormalize(n);935 916 int len_z; 936 917 int len_n; … … 983 964 erg->n = napCopy(src->n); 984 965 erg->s = src->s; 985 erg->cnt=src->cnt;986 966 return (number)erg; 987 967 } … … 995 975 erg->n = nap_Copy(src->n,r); 996 976 erg->s = src->s; 997 erg->cnt=src->cnt;998 977 return (number)erg; 999 978 } … … 1047 1026 // number inv=nacInvers(napGetCoeff(x)); 1048 1027 // napMultN(lu->z,inv); 1049 // n acDelete(&inv,nacRing);1028 // n_Delete(&inv,nacRing); 1050 1029 // napDelete(&x); 1051 1030 // } … … 1053 1032 lu->n = x; 1054 1033 lu->s = FALSE; 1055 lu->cnt=si_max(a->cnt,b->cnt)+1;1056 1034 if (lu->n!=NULL) 1057 1035 { 1058 1036 number luu=(number)lu; 1059 naNormalize 0(luu);1037 naNormalize(luu); 1060 1038 lu=(lnumber)luu; 1061 1039 } … … 1113 1091 // number inv=nacInvers(napGetCoeff(x)); 1114 1092 // napMultN(lu->z,inv); 1115 // n acDelete(&inv,nacRing);1093 // n_Delete(&inv,nacRing); 1116 1094 // napDelete(&x); 1117 1095 // } … … 1119 1097 lu->n = x; 1120 1098 lu->s = FALSE; 1121 lu->cnt=si_max(a->cnt,b->cnt)+1;1122 1099 if (lu->n!=NULL) 1123 1100 { 1124 1101 number luu=(number)lu; 1125 naNormalize 0(luu);1102 naNormalize(luu); 1126 1103 lu=(lnumber)luu; 1127 1104 } … … 1191 1168 napDelete(&x); 1192 1169 lo->n = x; 1193 lo->cnt=a->cnt+b->cnt+1;1194 1170 if(lo->z==NULL) 1195 1171 { … … 1202 1178 lo->s = 0; 1203 1179 number luu=(number)lo; 1204 naNormalize 0(luu);1180 naNormalize(luu); 1205 1181 lo=(lnumber)luu; 1206 1182 } … … 1292 1268 napDelete(&x); 1293 1269 lo->n = x; 1294 lo->cnt=a->cnt+b->cnt+1;1295 1270 if (lo->n!=NULL) 1296 1271 { … … 1367 1342 else 1368 1343 lo->n = x; 1369 lo->cnt=b->cnt+1;1370 1344 if (lo->n!=NULL) 1371 1345 { 1372 1346 number luu=(number)lo; 1373 naNormalize 0(luu);1347 naNormalize(luu); 1374 1348 lo=(lnumber)luu; 1375 1349 } … … 1488 1462 naTest(*p); 1489 1463 } 1490 a->cnt=0;1491 1464 return s; 1492 1465 } … … 1586 1559 if (!nacIsZero(t)) 1587 1560 { 1588 n acDelete(&t,nacRing);1561 n_Delete(&t,nacRing); 1589 1562 return FALSE; 1590 1563 } 1591 1564 else 1592 n acDelete(&t,nacRing);1565 n_Delete(&t,nacRing); 1593 1566 } 1594 1567 napIter(x); … … 1602 1575 a->n = NULL; 1603 1576 a->s = 2; 1604 a->cnt=0;1605 1577 return TRUE; 1606 1578 } … … 1693 1665 } 1694 1666 #endif 1695 result->cnt=0;1696 1667 naTest((number)result); 1697 1668 return (number)result; … … 1717 1688 if ((p==NULL) /*|| (p->s==2)*/) 1718 1689 return; 1719 p->s = 2; p->cnt=0;1690 p->s = 2; 1720 1691 napoly x = p->z; 1721 1692 napoly y = p->n; … … 1761 1732 x=p_Mult_nn(x,n,nacRing);p_Normalize(x,nacRing); 1762 1733 y=p_Mult_nn(y,n,nacRing);p_Normalize(y,nacRing); 1763 n acDelete(&n,nacRing);1734 n_Delete(&n,nacRing); 1764 1735 while(x!=NULL) 1765 1736 { … … 1810 1781 nacNormalize(h1); 1811 1782 x=p_Mult_nn(x,h1,nacRing);p_Normalize(x,nacRing); 1812 n acDelete(&h1,nacRing);1783 n_Delete(&h1,nacRing); 1813 1784 napDelete1(&y); 1814 1785 p->n = NULL; … … 1856 1827 x=p_Mult_nn(x,n,nacRing);p_Normalize(x,nacRing); 1857 1828 y=p_Mult_nn(y,n,nacRing);p_Normalize(y,nacRing); 1858 n acDelete(&n,nacRing);1829 n_Delete(&n,nacRing); 1859 1830 while(x!=NULL) 1860 1831 { … … 1913 1884 if(nacIsOne(d)) 1914 1885 { 1915 n acDelete(&g,nacRing);1916 n acDelete(&d,nacRing);1886 n_Delete(&g,nacRing); 1887 n_Delete(&d,nacRing); 1917 1888 naTest(pp); 1918 1889 return; 1919 1890 } 1920 n acDelete(&g,nacRing);1891 n_Delete(&g,nacRing); 1921 1892 g = d; 1922 1893 napIter(x); … … 1927 1898 if(nacIsOne(d)) 1928 1899 { 1929 n acDelete(&g,nacRing);1930 n acDelete(&d,nacRing);1900 n_Delete(&g,nacRing); 1901 n_Delete(&d,nacRing); 1931 1902 naTest(pp); 1932 1903 return; 1933 1904 } 1934 n acDelete(&g,nacRing);1905 n_Delete(&g,nacRing); 1935 1906 g = d; 1936 1907 napIter(y); … … 1950 1921 napIter(y); 1951 1922 } 1952 n acDelete(&g,nacRing);1923 n_Delete(&g,nacRing); 1953 1924 naTest(pp); 1954 1925 } … … 1982 1953 bt = nacGcd(t, napGetCoeff(xx), nacRing); 1983 1954 r = nacMult(t, napGetCoeff(xx)); 1984 n acDelete(&napGetCoeff(xx),nacRing);1955 n_Delete(&napGetCoeff(xx),nacRing); 1985 1956 napGetCoeff(xx) = nacDiv(r, bt); 1986 1957 nacNormalize(napGetCoeff(xx)); 1987 n acDelete(&bt,nacRing);1988 n acDelete(&r,nacRing);1958 n_Delete(&bt,nacRing); 1959 n_Delete(&r,nacRing); 1989 1960 napIter(xx); 1990 1961 } 1991 1962 } 1992 n acDelete(&t,nacRing);1963 n_Delete(&t,nacRing); 1993 1964 result->z = x; 1994 result->cnt=0;1995 1965 #ifdef HAVE_FACTORY 1996 1966 if (b->n!=NULL) … … 2042 2012 a=nacCopy(napGetCoeff(x)); 2043 2013 number aa=nacInvers(a); 2044 n acDelete(&a,nacRing);2014 n_Delete(&a,nacRing); 2045 2015 x=p_Mult_nn(x,aa,nacRing);p_Normalize(x,nacRing); 2046 n acDelete(&aa,nacRing);2016 n_Delete(&aa,nacRing); 2047 2017 } 2048 2018 } … … 2058 2028 lnumber l=(lnumber)omAllocBin(rnumber_bin); 2059 2029 l->s=2; 2060 l->cnt=0;2061 2030 l->z=(napoly)p_Init(nacRing); 2062 2031 int i=(int)((long)c); … … 2075 2044 lnumber l=(lnumber)omAllocBin(rnumber_bin); 2076 2045 l->s=0; 2077 l->cnt=0;2078 2046 l->z=(napoly)p_Init(nacRing); 2079 2047 napGetCoeff(l->z)=nlCopy(c); … … 2090 2058 lnumber l=(lnumber)omAllocBin(rnumber_bin); 2091 2059 l->s=2; 2092 l->cnt=0;2093 2060 l->z=(napoly)p_Init(nacRing); 2094 2061 napGetCoeff(l->z)=c; /* omit npCopy, because npCopy is a no-op */ … … 2109 2076 lnumber l=(lnumber)omAllocBin(rnumber_bin); 2110 2077 l->s=2; 2111 l->cnt=0;2112 2078 l->z=(napoly)p_Init(nacRing); 2113 2079 napGetCoeff(l->z)=n; … … 2127 2093 lnumber l=(lnumber)omAllocBin(rnumber_bin); 2128 2094 l->s=2; 2129 l->cnt=0;2130 2095 l->z=(napoly)p_Init(nacRing); 2131 2096 napGetCoeff(l->z)=n; … … 2195 2160 } 2196 2161 /* else continue*/ 2197 n acDelete(&(napGetCoeff(w)),nacRing);2162 n_Delete(&(napGetCoeff(w)),nacRing); 2198 2163 } 2199 2164 else … … 2218 2183 lnumber src =(lnumber)c; 2219 2184 erg->s=src->s; 2220 erg->cnt=src->cnt;2221 2185 erg->z=napMap(src->z); 2222 2186 erg->n=napMap(src->n); … … 2429 2393 rr->z=nap_Copy(naGetDenom0(x),r); 2430 2394 rr->s = 2; 2431 rr->cnt=0;2432 2395 return (number)rr; 2433 2396 } … … 2443 2406 rr->z=nap_Copy(naGetNom0(x),r); 2444 2407 rr->s = 2; 2445 rr->cnt=0;2446 2408 return (number)rr; 2447 2409 } -
kernel/longalg.h
r893148 re475e3 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: longalg.h,v 1.1 2 2009-08-05 17:29:44Singular Exp $ */6 /* $Id: longalg.h,v 1.13 2009-08-07 11:13:40 Singular Exp $ */ 7 7 /* 8 8 * ABSTRACT: algebraic numbers … … 20 20 napoly n; 21 21 BOOLEAN s; 22 short cnt;23 22 }; 24 23
Note: See TracChangeset
for help on using the changeset viewer.