Changeset 4d1ae5 in git
- Timestamp:
- Jun 21, 2010, 7:41:28 PM (13 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- f1c465fbf33937cf812c6bfc9bdc7a4e5c585fd4
- Parents:
- 925a43c559bf2bd9536bcb511626e89f6552ac3e
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2010-06-21 19:41:28+02:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:55:15+01:00
- Location:
- coeffs
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
coeffs/longrat.h
r925a43c r4d1ae5 70 70 number nlBigInt(number &n); 71 71 #ifdef HAVE_RINGS 72 void nlGMP(number &i, number n );72 void nlGMP(number &i, number n, const coeffs r); 73 73 #endif 74 74 BOOLEAN nlGreaterZero(number za, const coeffs r); -
coeffs/rintegers.cc
r925a43c r4d1ae5 235 235 } 236 236 237 number nrzInvers (number c )237 number nrzInvers (number c, const coeffs r) 238 238 { 239 239 if (!nrzIsUnit((number) c)) … … 242 242 return (number)0; //TODO 243 243 } 244 return nrzCopy(c );244 return nrzCopy(c,r); 245 245 } 246 246 … … 270 270 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 271 271 mpz_init(erg); 272 nlGMP(from, (number) erg );272 nlGMP(from, (number) erg, src); 273 273 return (number) erg; 274 274 } -
coeffs/rintegers.h
r925a43c r4d1ae5 14 14 extern NATNUMBER nrzModul; 15 15 16 number nrzCopy (number a); 17 number cfrzCopy (number a, const coeffs r); 16 number nrzCopy (number a, const coeffs r); 18 17 int nrzSize (number a); 19 18 void nrzDelete (number *a, const coeffs r); -
coeffs/rmodulo2m.cc
r925a43c r4d1ae5 64 64 r->cfDBTest = nr2mDBTest; 65 65 #endif 66 r->has_simple_Alloc=TRUE; 66 67 } 67 68 … … 530 531 mpz_init_set_ui(k, dst->nr2mModul); 531 532 532 nlGMP(from, (number)erg );533 nlGMP(from, (number)erg, dst); 533 534 mpz_and(erg, erg, k); 534 535 number res = (number)mpz_get_ui(erg); -
coeffs/rmodulon.cc
r925a43c r4d1ae5 9 9 #include <string.h> 10 10 #include "config.h" 11 #include <auxiliary.h> 11 12 12 13 #ifdef HAVE_RINGS … … 29 30 void nrnInitChar (coeffs r, void*) 30 31 { 31 nrnInitExp( c, r);32 n->cfInit = nrnInit;33 n->cfDelete = nrnDelete;34 n->cfCopy = nrnCopy;35 n->nSize = nrnSize;36 n->n_Int = nrnInt;37 n->nAdd = nrnAdd;38 n->nSub = nrnSub;39 n->nMult = nrnMult;40 n->nDiv = nrnDiv;41 n->nIntDiv = nrnIntDiv;42 n->nIntMod = nrnMod;43 n->nExactDiv = nrnDiv;44 n->nNeg = nrnNeg;45 n->nInvers = nrnInvers;46 n->nDivBy = nrnDivBy;47 n->nDivComp = nrnDivComp;48 n->nGreater = nrnGreater;49 n->nEqual = nrnEqual;50 n->nIsZero = nrnIsZero;51 n->nIsOne = nrnIsOne;52 n->nIsMOne = nrnIsMOne;53 n->nGreaterZero = nrnGreaterZero;54 n->cfWrite = nrnWrite;55 n->nRead = nrnRead;56 n->nPower = nrnPower;57 n->cfSetMap = nrnSetMap;58 n->nNormalize = ndNormalize;59 n->nLcm = nrnLcm;60 n->nGcd = nrnGcd;61 n->nIsUnit = nrnIsUnit;62 n->nGetUnit = nrnGetUnit;63 n->nExtGcd = nrnExtGcd;64 n->nName = nrnName;32 nrnInitExp(r->ch, r); 33 r->cfInit = nrnInit; 34 r->cfDelete = nrnDelete; 35 r->cfCopy = nrnCopy; 36 r->cfSize = nrnSize; 37 r->cfInt = nrnInt; 38 r->cfAdd = nrnAdd; 39 r->cfSub = nrnSub; 40 r->cfMult = nrnMult; 41 r->cfDiv = nrnDiv; 42 r->cfIntDiv = nrnIntDiv; 43 r->cfIntMod = nrnMod; 44 r->cfExactDiv = nrnDiv; 45 r->cfNeg = nrnNeg; 46 r->cfInvers = nrnInvers; 47 r->cfDivBy = nrnDivBy; 48 r->cfDivComp = nrnDivComp; 49 r->cfGreater = nrnGreater; 50 r->cfEqual = nrnEqual; 51 r->cfIsZero = nrnIsZero; 52 r->cfIsOne = nrnIsOne; 53 r->cfIsMOne = nrnIsMOne; 54 r->cfGreaterZero = nrnGreaterZero; 55 r->cfWrite = nrnWrite; 56 r->cfRead = nrnRead; 57 r->cfPower = nrnPower; 58 r->cfSetMap = nrnSetMap; 59 r->cfNormalize = ndNormalize; 60 r->cfLcm = nrnLcm; 61 r->cfGcd = nrnGcd; 62 r->cfIsUnit = nrnIsUnit; 63 r->cfGetUnit = nrnGetUnit; 64 r->cfExtGcd = nrnExtGcd; 65 r->cfName = ndName; 65 66 #ifdef LDEBUG 66 n->nDBTest = nrnDBTest;67 r->cfDBTest = nrnDBTest; 67 68 #endif 68 69 } … … 265 266 { 266 267 number tmp = nrnGcd(a, (number) r->nrnModul, r); 267 bool res = nrnIsOne(tmp );268 bool res = nrnIsOne(tmp,r); 268 269 nrnDelete(&tmp, NULL); 269 270 return res; … … 277 278 mpz_tdiv_q(unit, (int_number) k, unit); 278 279 int_number gcd = (int_number) nrnGcd((number) unit, 0, r); 279 if (!nrnIsOne((number) gcd ))280 if (!nrnIsOne((number) gcd,r)) 280 281 { 281 282 int_number ctmp; 282 283 // tmp := unit^2 283 int_number tmp = (int_number) nrnMult((number) unit,(number) unit );284 int_number tmp = (int_number) nrnMult((number) unit,(number) unit,r); 284 285 // gcd_new := gcd(tmp, 0) 285 286 int_number gcd_new = (int_number) nrnGcd((number) tmp, 0, r); 286 while (!nrnEqual((number) gcd_new,(number) gcd ))287 while (!nrnEqual((number) gcd_new,(number) gcd,r)) 287 288 { 288 289 // gcd := gcd_new … … 323 324 int nrnDivComp(number a, number b, const coeffs r) 324 325 { 325 if (nrnEqual(a, b )) return 2;326 if (nrnEqual(a, b,r)) return 2; 326 327 if (mpz_divisible_p((int_number) a, (int_number) b)) return -1; 327 328 if (mpz_divisible_p((int_number) b, (int_number) a)) return 1; 328 return 0;329 return 2; 329 330 } 330 331 … … 343 344 int_number gcd = (int_number) nrnGcd(a, b, r); 344 345 mpz_divexact(erg, (int_number) b, gcd); 345 if (!nrnIsUnit((number) erg ))346 if (!nrnIsUnit((number) erg,r)) 346 347 { 347 348 WerrorS("Division not possible, even by cancelling zero divisors."); … … 352 353 } 353 354 // a / gcd(a,b) * [b / gcd (a,b)]^(-1) 354 int_number tmp = (int_number) nrnInvers((number) erg );355 int_number tmp = (int_number) nrnInvers((number) erg,r); 355 356 mpz_divexact(erg, (int_number) a, gcd); 356 357 mpz_mul(erg, erg, tmp); … … 362 363 } 363 364 364 number nrnMod (number a, number b, const coeffs r)365 number nrnMod (number a, number b, const coeffs R) 365 366 { 366 367 /* … … 387 388 mpz_init(g); 388 389 mpz_init_set_si(r,(long)0); 389 mpz_gcd(g, (int_number) r->nrnModul, (int_number)b); // g is now as above390 mpz_gcd(g, (int_number) R->nrnModul, (int_number)b); // g is now as above 390 391 if (mpz_cmp_si(g, (long)1) != 0) mpz_mod(r, (int_number)a, g); // the case g <> 1 391 392 mpz_clear(g); … … 409 410 int_number nrnMapCoef = NULL; 410 411 411 number nrnMapModN(number from, const coeffs r)412 { 413 return nrnMult(from, (number) nrnMapCoef );414 } 415 416 number nrnMap2toM(number from, const coeffs r)412 number nrnMapModN(number from, const coeffs src, const coeffs dst) 413 { 414 return nrnMult(from, (number) nrnMapCoef, dst); 415 } 416 417 number nrnMap2toM(number from, const coeffs src, const coeffs dst) 417 418 { 418 419 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 419 420 mpz_init(erg); 420 421 mpz_mul_ui(erg, nrnMapCoef, (NATNUMBER) from); 421 mpz_mod(erg, erg, r->nrnModul); 422 return (number) erg; 423 } 424 425 number nrnMapZp(number from, const coeffs r) 426 { 427 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 428 mpz_init(erg); 422 mpz_mod(erg, erg, dst->nrnModul); 423 return (number) erg; 424 } 425 426 number nrnMapZp(number from, const coeffs src, const coeffs dst) 427 { 428 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 429 mpz_init(erg); 430 // TODO: use npInt(...) 429 431 mpz_mul_si(erg, nrnMapCoef, (NATNUMBER) from); 430 mpz_mod(erg, erg, r->nrnModul);431 return (number) erg; 432 } 433 434 number nrnMapGMP(number from, const coeffs r)435 { 436 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 437 mpz_init(erg); 438 mpz_mod(erg, (int_number) from, r->nrnModul);439 return (number) erg; 440 } 441 442 number nrnMapQ(number from, const coeffs r)443 { 444 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 445 mpz_init(erg); 446 nlGMP(from, (number) erg );447 mpz_mod(erg, erg, r->nrnModul);448 return (number) erg; 449 } 450 451 nMapFunc nrnSetMap(const ring src, const ringdst)432 mpz_mod(erg, erg, dst->nrnModul); 433 return (number) erg; 434 } 435 436 number nrnMapGMP(number from, const coeffs src, const coeffs dst) 437 { 438 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 439 mpz_init(erg); 440 mpz_mod(erg, (int_number) from, dst->nrnModul); 441 return (number) erg; 442 } 443 444 number nrnMapQ(number from, const coeffs src, const coeffs dst) 445 { 446 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 447 mpz_init(erg); 448 nlGMP(from, (number) erg, dst); 449 mpz_mod(erg, erg, dst->nrnModul); 450 return (number) erg; 451 } 452 453 nMapFunc nrnSetMap(const coeffs src, const coeffs dst) 452 454 { 453 455 /* dst = currRing->cf */ 454 if ( rField_is_Ring_Z(src))456 if (nField_is_Ring_Z(src)) 455 457 { 456 458 return nrnMapGMP; 457 459 } 458 if ( rField_is_Q(src))460 if (nField_is_Q(src)) 459 461 { 460 462 return nrnMapQ; 461 463 } 462 464 // Some type of Z/n ring / field 463 if ( rField_is_Ring_ModN(src) || rField_is_Ring_PtoM(src) || rField_is_Ring_2toM(src) || rField_is_Zp(src))465 if (nField_is_Ring_ModN(src) || nField_is_Ring_PtoM(src) || nField_is_Ring_2toM(src) || nField_is_Zp(src)) 464 466 { 465 467 if ( (src->ringtype > 0) … … 470 472 int_number nrnMapModul = (int_number) omAllocBin(gmp_nrz_bin); 471 473 // Computing the n of Z/n 472 if ( rField_is_Zp(src))474 if (nField_is_Zp(src)) 473 475 { 474 476 mpz_init_set_si(nrnMapModul, src->ch); … … 487 489 mpz_init(nrnMapCoef); 488 490 } 489 if (mpz_divisible_p(nrnMapModul, r->nrnModul))491 if (mpz_divisible_p(nrnMapModul, dst->nrnModul)) 490 492 { 491 493 mpz_set_si(nrnMapCoef, 1); 492 494 } 493 495 else 494 if (nrnDivBy(NULL, (number) nrnMapModul ))496 if (nrnDivBy(NULL, (number) nrnMapModul,dst)) 495 497 { 496 mpz_divexact(nrnMapCoef, r->nrnModul, nrnMapModul);497 int_number tmp = r->nrnModul;498 r->nrnModul = nrnMapModul;499 if (!nrnIsUnit((number) nrnMapCoef ))498 mpz_divexact(nrnMapCoef, dst->nrnModul, nrnMapModul); 499 int_number tmp = dst->nrnModul; 500 dst->nrnModul = nrnMapModul; 501 if (!nrnIsUnit((number) nrnMapCoef,dst)) 500 502 { 501 r->nrnModul = tmp;502 nrnDelete((number*) &nrnMapModul, r);503 dst->nrnModul = tmp; 504 nrnDelete((number*) &nrnMapModul, dst); 503 505 return NULL; 504 506 } 505 int_number inv = (int_number) nrnInvers((number) nrnMapCoef );506 r->nrnModul = tmp;507 int_number inv = (int_number) nrnInvers((number) nrnMapCoef,dst); 508 dst->nrnModul = tmp; 507 509 mpz_mul(nrnMapCoef, nrnMapCoef, inv); 508 mpz_mod(nrnMapCoef, nrnMapCoef, r->nrnModul);509 nrnDelete((number*) &inv, r);510 mpz_mod(nrnMapCoef, nrnMapCoef, dst->nrnModul); 511 nrnDelete((number*) &inv, dst); 510 512 } 511 513 else 512 514 { 513 nrnDelete((number*) &nrnMapModul, r);515 nrnDelete((number*) &nrnMapModul, dst); 514 516 return NULL; 515 517 } 516 nrnDelete((number*) &nrnMapModul, r);517 if ( rField_is_Ring_2toM(src))518 nrnDelete((number*) &nrnMapModul, dst); 519 if (nField_is_Ring_2toM(src)) 518 520 return nrnMap2toM; 519 else if ( rField_is_Zp(src))521 else if (nField_is_Zp(src)) 520 522 return nrnMapZp; 521 523 else -
coeffs/rmodulon.h
r925a43c r4d1ae5 47 47 #define nrnWrite nrzWrite 48 48 const char * nrnRead (const char *s, number *a, const coeffs r); 49 char * nrnName (number n, const coeffs r);50 49 #ifdef LDEBUG 51 50 BOOLEAN nrnDBTest (number a, const char *f, const int l, const coeffs r);
Note: See TracChangeset
for help on using the changeset viewer.