Changeset 417a91a in git
- Timestamp:
- Jul 3, 2018, 2:15:33 PM (5 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 54bb6bce24267ffeb1b32ce9abb95365d5aaa38d
- Parents:
- 5ad0a80660fd3e252bf19ad5428baba460bdb54f
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ipshell.cc
r5ad0a8 r417a91a 1569 1569 ring r = IDRING(tmp) = (ring) omAlloc0Bin(sip_sring_bin); 1570 1570 1571 #ifndef TEST_ZN_AS_ZP 1571 1572 r->cf = nInitChar(n_Zp, (void*)32003); // r->cf->ch = 32003; 1573 #else 1574 mpz_t modBase; 1575 mpz_init_set_ui(modBase, (long)32003); 1576 ZnmInfo info; 1577 info.base= modBase; 1578 info.exp= 1; 1579 r->cf=nInitChar(n_Zn,(void*) &info); 1580 r->cf->is_field=1; 1581 r->cf->is_domain=1; 1582 r->cf->has_simple_Inverse=1; 1583 #endif 1572 1584 r->N = 3; 1573 1585 /*r->P = 0; Alloc0 in idhdl::set, ipid.cc*/ … … 2787 2799 ch = l; 2788 2800 } 2801 #ifndef TEST_ZN_AS_ZP 2789 2802 R->cf = nInitChar(n_Zp, (void*)(long)ch); 2803 #else 2804 mpz_t modBase; 2805 mpz_init_set_ui(modBase,(long) ch); 2806 ZnmInfo info; 2807 info.base= modBase; 2808 info.exp= 1; 2809 R->cf=nInitChar(n_Zn,(void*) &info); //exponent is missing 2810 R->cf->is_field=1; 2811 R->cf->is_domain=1; 2812 R->cf->has_simple_Inverse=1; 2813 #endif 2790 2814 } 2791 2815 } … … 2907 2931 if ( (rField_is_Q_a(orig_ring) && // Q(a..) -> Q(a..) || Q || Zp || Zp(a) 2908 2932 (rField_is_Q(currRing) || rField_is_Q_a(currRing) || 2909 (rField_is_Zp(currRing) || rField_is_Zp_a(currRing)))) 2933 rField_is_Zp(currRing) || rField_is_Zp_a(currRing) || 2934 rField_is_Zn(currRing))) 2910 2935 || 2911 2936 (rField_is_Zp_a(orig_ring) && // Zp(a..) -> Zp(a..) || Zp … … 5613 5638 ch=32003; 5614 5639 } 5640 #ifndef TEST_ZN_AS_ZP 5615 5641 cf = nInitChar(n_Zp, (void*)(long)ch); 5642 #else 5643 mpz_t modBase; 5644 mpz_init_set_ui(modBase, (long)ch); 5645 ZnmInfo info; 5646 info.base= modBase; 5647 info.exp= 1; 5648 cf=nInitChar(n_Zn,(void*) &info); 5649 cf->is_field=1; 5650 cf->is_domain=1; 5651 cf->has_simple_Inverse=1; 5652 #endif 5616 5653 } 5617 5654 else … … 5725 5762 { 5726 5763 pnn=pnn->next; 5727 mpz_set_ui(modBase, ( int)(long) pnn->Data());5764 mpz_set_ui(modBase, (long) pnn->Data()); 5728 5765 if ((pnn->next!=NULL) && (pnn->next->Typ()==INT_CMD)) 5729 5766 { -
Singular/number2.cc
r5ad0a8 r417a91a 36 36 { 37 37 coeffs c1=(coeffs)a->Data(); 38 int i2=(int)(long)b->Data();38 long i2=(long)b->Data(); 39 39 if (c1->type==n_Z) 40 40 { 41 41 if (i2==IsPrime(i2)) 42 42 { 43 res->data=(void *)nInitChar(n_Zp,(void*)(long)i2); 43 #ifndef TEST_ZN_AS_ZP 44 res->data=(void *)nInitChar(n_Zp,(void*)i2); 45 #else 46 ZnmInfo info; 47 mpz_t modBase; 48 mpz_init_set_ui(modBase,i2); 49 info.base= modBase; 50 info.exp= 1; 51 res->data=(void *)nInitChar(n_Zn,&info); 52 mpz_clear(modBase); 53 #endif 44 54 } 45 55 else … … 57 67 { 58 68 mpz_clear(modBase); 59 res->data=(void *) nInitChar(n_Z2m,(void*) (long)i2);69 res->data=(void *) nInitChar(n_Z2m,(void*)i2); 60 70 return FALSE; 61 71 } -
libpolys/coeffs/rmodulon.cc
r5ad0a8 r417a91a 9 9 10 10 #include "misc/mylimits.h" 11 #include "misc/prime.h" // IsPrime 11 12 #include "reporter/reporter.h" 12 13 … … 24 25 #ifdef HAVE_RINGS 25 26 26 #if SI_INTEGER_VARIANT==227 // FIXME? TODO? // extern void nrzWrite (number &a, const coeffs r); // FIXME28 # define nrnWrite nrzWrite29 #else30 27 void nrnWrite (number a, const coeffs); 31 #endif32 28 #ifdef LDEBUG 33 29 BOOLEAN nrnDBTest (number a, const char *f, const int l, const coeffs r); … … 42 38 s= mpz_get_str (s, 10, r->modBase); 43 39 44 if (nCoeff_is_Ring_ModN(r)) Print("ZZ/bigint(%s)", s); 45 else if (nCoeff_is_Ring_PtoM(r)) Print("ZZ/(bigint(%s)^%lu)", s, r->modExponent); 40 #ifdef TEST_ZN_AS_ZP 41 if (l<10) 42 { 43 if (nCoeff_is_Ring_ModN(r)) Print("ZZ/%s", s); 44 else if (nCoeff_is_Ring_PtoM(r)) Print("ZZ/(%s^%lu)", s, r->modExponent); 45 } 46 else 47 #endif 48 { 49 if (nCoeff_is_Ring_ModN(r)) Print("ZZ/bigint(%s)", s); 50 else if (nCoeff_is_Ring_PtoM(r)) Print("ZZ/(bigint(%s)^%lu)", s, r->modExponent); 51 } 46 52 47 53 omFreeSize((ADDRESS)s, l); … … 65 71 66 72 67 static BOOLEAN nrnCoeff sEqual(const coeffs r, n_coeffType n, void * parameter)73 static BOOLEAN nrnCoeffIsEqual(const coeffs r, n_coeffType n, void * parameter) 68 74 { 69 75 /* test, if r is an instance of nInitCoeffs(n,parameter) */ 70 return (n==n_Zn) && (mpz_cmp_ui(r->modNumber,(long)parameter)==0); 76 ZnmInfo *info=(ZnmInfo*)parameter; 77 return (n==r->type) && (r->modExponent==info->exp) 78 && (mpz_cmp(r->modBase,info->base)==0); 71 79 } 72 80 … … 165 173 { 166 174 if (a == NULL) return 0; 167 return sizeof(mpz_t); 175 mpz_ptr p=(mpz_ptr)a; 176 int s=p->_mp_alloc; 177 return s; 168 178 } 169 179 … … 466 476 if (a == NULL) return FALSE; 467 477 #endif 468 if( nrnIsOne(a,r)) return FALSE; // for char 2478 if((r->ch==2) && (nrnIsOne(a,r))) return FALSE; 469 479 mpz_t t; mpz_init_set(t, (mpz_ptr)a); 470 480 mpz_add_ui(t, t, 1); … … 479 489 } 480 490 481 static BOOLEAN nrnGreaterZero(number k, const coeffs) 482 { 491 static BOOLEAN nrnGreaterZero(number k, const coeffs cf) 492 { 493 if (cf->is_field) 494 { 495 if (mpz_cmp_ui(cf->modBase,2)==0) 496 { 497 return TRUE; 498 } 499 mpz_t ch2; mpz_init_set(ch2, cf->modBase); 500 mpz_sub_ui(ch2,ch2,1); 501 mpz_divexact_ui(ch2,ch2,2); 502 if (mpz_cmp(ch2,(mpz_ptr)k)<0) 503 return FALSE; 504 mpz_clear(ch2); 505 } 483 506 return 0 < mpz_sgn1((mpz_ptr)k); 484 507 } … … 529 552 static number nrnDiv(number a, number b, const coeffs r) 530 553 { 554 if (r->is_field) 555 { 556 number inv=nrnInvers(b,r); 557 number erg=nrnMult(a,inv,r); 558 nrnDelete(&inv,r); 559 return erg; 560 } 531 561 if (a == NULL) a = (number)r->modNumber; 532 562 mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin); … … 723 753 } 724 754 #endif 725 #if SI_INTEGER_VARIANT!=2 726 void nrnWrite (number a, const coeffs) 755 void nrnWrite (number a, const coeffs cf) 727 756 { 728 757 char *s,*z; … … 735 764 int l=mpz_sizeinbase((mpz_ptr) a, 10) + 2; 736 765 s=(char*)omAlloc(l); 737 z=mpz_get_str(s,10,(mpz_ptr) a); 738 StringAppendS(z); 766 if (cf->is_field) 767 { 768 mpz_t ch2; mpz_init_set(ch2, cf->modBase); 769 mpz_sub_ui(ch2,ch2,1); 770 mpz_divexact_ui(ch2,ch2,2); 771 if ((mpz_cmp_ui(cf->modBase,2)!=0) && (mpz_cmp(ch2,(mpz_ptr)a)<0)) 772 { 773 mpz_sub(ch2,(mpz_ptr)a,cf->modBase); 774 z=mpz_get_str(s,10,ch2); 775 StringAppendS(z); 776 } 777 else 778 { 779 z=mpz_get_str(s,10,(mpz_ptr) a); 780 StringAppendS(z); 781 } 782 mpz_clear(ch2); 783 } 784 else 785 { 786 z=mpz_get_str(s,10,(mpz_ptr) a); 787 StringAppendS(z); 788 } 739 789 omFreeSize((ADDRESS)s,l); 740 790 } 741 791 } 742 #endif743 792 744 793 nMapFunc nrnSetMap(const coeffs src, const coeffs dst) … … 763 812 if ( (!nCoeff_is_Zp(src)) 764 813 && (mpz_cmp(src->modBase, dst->modBase) == 0) 765 && (src->modExponent == dst->modExponent)) return n rnMapGMP;814 && (src->modExponent == dst->modExponent)) return ndCopyMap; 766 815 else 767 816 { … … 896 945 } 897 946 mpz_mod(z, z, r->modNumber); 898 *a = (number) z; 947 if ((*s)=='/') 948 { 949 mpz_ptr n = (mpz_ptr) omAllocBin(gmp_nrz_bin); 950 s++; 951 s=nlCPEatLongC((char*)s,n); 952 if (!nrnIsOne((number)n,r)) 953 { 954 *a=nrnDiv((number)z,(number)n,r); 955 mpz_clear(z); 956 omFreeBin((void *)z, gmp_nrz_bin); 957 mpz_clear(n); 958 omFreeBin((void *)n, gmp_nrz_bin); 959 } 960 } 961 else 962 *a = (number) z; 899 963 return s; 964 } 965 966 static number nrnConvFactoryNSingN( const CanonicalForm n, const coeffs r) 967 { 968 return nrnInit(n.intval(),r); 969 } 970 971 static CanonicalForm nrnConvSingNFactoryN( number n, BOOLEAN setChar, const coeffs r ) 972 { 973 if (setChar) setCharacteristic( r->ch ); 974 return CanonicalForm(nrnInt( n,r )); 900 975 } 901 976 … … 958 1033 r->cfCoeffName = nrnCoeffName; 959 1034 r->cfCoeffWrite = nrnCoeffWrite; 960 r->nCoeffIsEqual = nrnCoeff sEqual;1035 r->nCoeffIsEqual = nrnCoeffIsEqual; 961 1036 r->cfKillChar = nrnKillChar; 962 1037 r->cfQuot1 = nrnQuot1; … … 964 1039 r->cfDBTest = nrnDBTest; 965 1040 #endif 1041 if ((r->modExponent==1)&&(mpz_size1(r->modBase)==1)) 1042 { 1043 long p=mpz_get_si(r->modBase); 1044 if ((p<=536870909)&&(p==IsPrime(p))) /*factory limit: <2^29*/ 1045 { 1046 r->convFactoryNSingN=nrnConvFactoryNSingN; 1047 r->convSingNFactoryN=nrnConvSingNFactoryN; 1048 } 1049 } 966 1050 return FALSE; 967 1051 } -
libpolys/polys/clapsing.cc
r5ad0a8 r417a91a 58 58 59 59 Off(SW_RATIONAL); 60 if (rField_is_Q(r) || rField_is_Zp(r) || rField_is_Ring_Z(r)) 60 if (rField_is_Q(r) || rField_is_Zp(r) || rField_is_Ring_Z(r) 61 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 61 62 { 62 63 setCharacteristic( rChar(r) ); … … 141 142 Off(SW_RATIONAL); 142 143 CanonicalForm F,G,GCD; 143 if (rField_is_Q(r) || (rField_is_Zp(r))) 144 if (rField_is_Q(r) || (rField_is_Zp(r)) 145 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 144 146 { 145 147 bool b1=isOn(SW_USE_EZGCD_P); … … 287 289 // for now there is only the possibility to handle polynomials over 288 290 // Q and Fp ... 289 if (rField_is_Zp(r) || rField_is_Q(r)) 291 if (rField_is_Zp(r) || rField_is_Q(r) 292 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 290 293 { 291 294 Variable X(i); … … 424 427 res=NULL;pa=NULL;pb=NULL; 425 428 On(SW_SYMMETRIC_FF); 426 if ( rField_is_Q(r) || rField_is_Zp(r) ) 429 if ( rField_is_Q(r) || rField_is_Zp(r) 430 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 427 431 { 428 432 setCharacteristic( rChar(r) ); … … 508 512 poly res=NULL; 509 513 On(SW_RATIONAL); 510 if (rField_is_Zp(r) || rField_is_Q(r)) 514 if (rField_is_Zp(r) || rField_is_Q(r) 515 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 511 516 { 512 517 setCharacteristic( rChar(r) ); … … 560 565 poly res=NULL; 561 566 On(SW_RATIONAL); 562 if (rField_is_Zp(r) || rField_is_Q(r)) 567 if (rField_is_Zp(r) || rField_is_Q(r) 568 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 563 569 { 564 570 setCharacteristic( rChar(r) ); … … 606 612 poly res=NULL; 607 613 On(SW_RATIONAL); 608 if (rField_is_Zp(r) || rField_is_Q(r)) 614 if (rField_is_Zp(r) || rField_is_Q(r) 615 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 609 616 { 610 617 setCharacteristic( rChar(r) ); … … 759 766 CanonicalForm F, FAC,Q,R; 760 767 Variable a; 761 if (rField_is_Zp(r) || rField_is_Q(r)) 768 if (rField_is_Zp(r) || rField_is_Q(r) 769 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 762 770 { 763 771 F=convSingPFactoryP( f,r ); … … 793 801 if (R.isZero()) 794 802 { 795 if (rField_is_Zp(r) || rField_is_Q(r)) 803 if (rField_is_Zp(r) || rField_is_Q(r) 804 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 796 805 { 797 806 q = convFactoryPSingP( Q,r ); … … 915 924 916 925 Variable a; 917 if (!rField_is_Zp(r) && !rField_is_Zp_a(r) && !rField_is_Z(r)) /* Q, Q(a) */ 926 if (!rField_is_Zp(r) && !rField_is_Zp_a(r) && !rField_is_Z(r) 927 && !(rField_is_Zn(r) && (r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) /* Q, Q(a) */ 918 928 { 919 929 //if (f!=NULL) // already tested at start of routine … … 953 963 } 954 964 } 955 if (rField_is_Q(r) || rField_is_Zp(r) || (rField_is_Z(r))) 965 if ((rField_is_Q(r) || rField_is_Zp(r) || (rField_is_Z(r))) 966 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 956 967 { 957 968 setCharacteristic( rChar(r) ); … … 960 971 } 961 972 // and over Q(a) / Fp(a) 962 else if (r->cf->extRing!=NULL) 973 else if ((r->cf->extRing!=NULL) 974 &&(r->cf->extRing->cf->convSingNFactoryN!=ndConvSingNFactoryN)) 963 975 { 964 976 if (rField_is_Q_a (r)) setCharacteristic (0); … … 1013 1025 { 1014 1026 if (with_exps!=1) (**v)[j] = J.getItem().exp(); 1015 if (rField_is_Zp(r) || rField_is_Q(r)|| rField_is_Z(r)) /* Q, Fp, Z */ 1027 if (rField_is_Zp(r) || rField_is_Q(r)|| rField_is_Z(r) 1028 || (rField_is_Zn(r) && r->cf->convSingNFactoryN!=ndConvSingNFactoryN)) /* Q, Fp, Z */ 1016 1029 { 1017 1030 //count_Factors(res,*v,f, j, convFactoryPSingP( J.getItem().factor() ); … … 1313 1326 } 1314 1327 } 1315 if (rField_is_Q(r) || rField_is_Zp(r)) 1328 if (rField_is_Q(r) || rField_is_Zp(r) 1329 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 1316 1330 { 1317 1331 setCharacteristic( rChar(r) ); … … 1381 1395 { 1382 1396 if (with_exps!=1 && with_exps!=3) (**v)[j] = J.getItem().exp(); 1383 if (rField_is_Zp(r) || rField_is_Q(r)) 1397 if (rField_is_Zp(r) || rField_is_Q(r) 1398 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 1384 1399 res->m[j] = convFactoryPSingP( J.getItem().factor(),r ); 1385 1400 else if (r->cf->extRing!=NULL) /* Q(a), Fp(a) */ … … 1447 1462 CFList L; 1448 1463 ListCFList LL; 1449 if (rField_is_Q(r) || rField_is_Zp(r)) 1464 if (rField_is_Q(r) || rField_is_Zp(r) 1465 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 1450 1466 { 1451 1467 setCharacteristic( rChar(r) ); … … 1516 1532 for (n=1, Li = LLi.getItem(); Li.hasItem(); Li++, n++) 1517 1533 { 1518 if (rField_is_Q(r) || rField_is_Zp(r)) 1534 if (rField_is_Q(r) || rField_is_Zp(r) 1535 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 1519 1536 MATELEM(res,m,n)=convFactoryPSingP(Li.getItem(),r); 1520 1537 else … … 1532 1549 On(SW_SYMMETRIC_FF); 1533 1550 CFList L; 1534 if (rField_is_Q(r) || rField_is_Zp(r)) 1551 if (rField_is_Q(r) || rField_is_Zp(r) 1552 || (rField_is_Zn(r)&&(r->cf->convSingNFactoryN!=ndConvSingNFactoryN))) 1535 1553 { 1536 1554 setCharacteristic( rChar(r) ); -
libpolys/polys/ext_fields/transext.cc
r5ad0a8 r417a91a 2100 2100 if (src->ch == dst->ch) return ntMapPP; /// Z/p --> Z/p(T) 2101 2101 else return ntMapUP; /// Z/u --> Z/p(T) 2102 } 2103 if (nCoeff_is_Zn(src) && nCoeff_is_Zn(bDst)) 2104 { 2105 if (mpz_cmp(src->modNumber,bDst->modNumber)==0) return ntMapPP; /// Z/p --> Z/p(T) 2102 2106 } 2103 2107 } -
libpolys/polys/monomials/ring.cc
r5ad0a8 r417a91a 751 751 { 752 752 WerrorS("Z/p+..."); 753 return -1; 754 } 755 } 756 else if ((getCoeffType(r1->cf)==n_Zn)||(getCoeffType(r1->cf)==n_Znm)) 757 { 758 if (getCoeffType(r2->cf)==n_Q) 759 { 760 tmpR.cf=nCopyCoeff(r1->cf); 761 } 762 else if (nCoeff_is_Extension(r2->cf) 763 && (mpz_cmp(r1->cf->modNumber,r2->cf->extRing->cf->modNumber)==0)) 764 { // covers transext.cc and algext.cc 765 tmpR.cf=nCopyCoeff(r2->cf); 766 } 767 else 768 { 769 WerrorS("Z/n+..."); 753 770 return -1; 754 771 }
Note: See TracChangeset
for help on using the changeset viewer.