Changeset 30f819 in git
- Timestamp:
- Dec 9, 2017, 6:48:51 PM (6 years ago)
- Branches:
- (u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
- Children:
- 06468393fbc59c84e3eaa06852d8f99e75c5da27
- Parents:
- eece62e3bb306b45df101c601f39d368d165c99a
- git-author:
- Christian Eder <ederc@mathematik.uni-kl.de>2017-12-09 18:48:51+01:00
- git-committer:
- Christian Eder <ederc@mathematik.uni-kl.de>2018-08-16 09:52:17+02:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libpolys/coeffs/rintegers.cc
reece62 r30f819 269 269 mpz_tdiv_q(erg, (mpz_ptr) a, (mpz_ptr) b); 270 270 return (number) erg; 271 } 272 273 static number nrzSmallestQuotRem (number a, number b, number * r, const coeffs ) 274 { 275 mpz_ptr qq = (mpz_ptr) omAllocBin(gmp_nrz_bin); 276 mpz_init(qq); 277 mpz_ptr rr = (mpz_ptr) omAllocBin(gmp_nrz_bin); 278 mpz_init(rr); 279 int gsign = mpz_sgn((mpz_ptr) b); 280 mpz_t gg, ghalf; 281 mpz_init(gg); 282 mpz_init(ghalf); 283 mpz_abs(gg, (mpz_ptr) b); 284 mpz_fdiv_qr(qq, rr, (mpz_ptr) a, gg); 285 mpz_tdiv_q_2exp(ghalf, gg, 1); 286 if (mpz_cmp(rr, ghalf) > 0) // r > ghalf 287 { 288 mpz_sub(rr, rr, gg); 289 mpz_add_ui(qq, qq, 1); 290 } 291 if (gsign < 0) mpz_neg(qq, qq); 292 293 mpz_clear(gg); 294 mpz_clear(ghalf); 295 if (r==NULL) 296 { 297 mpz_clear(rr); 298 omFreeBin(rr,gmp_nrz_bin); 299 } 300 else 301 { 302 *r=(number)rr; 303 } 304 return (number) qq; 271 305 } 272 306 … … 620 654 r->cfXExtGcd = nrzXExtGcd; 621 655 r->cfDivBy = nrzDivBy; 622 r->cfQuotRem = nrz QuotRem;656 r->cfQuotRem = nrzSmallestQuotRem; 623 657 r->cfInpNeg = nrzNeg; 624 658 r->cfInvers= nrzInvers; … … 1857 1891 r->cfExtGcd = nrzExtGcd; // only for ring stuff 1858 1892 r->cfXExtGcd = nrzXExtGcd; // only for ring stuff 1859 r->cfQuotRem = nrz QuotRem;1893 r->cfQuotRem = nrzSmallestQuotRem; 1860 1894 r->cfDivBy = nrzDivBy; // only for ring stuff 1861 1895 //#endif
Note: See TracChangeset
for help on using the changeset viewer.