Changeset a62201 in git for libpolys/coeffs/numbers.cc
- Timestamp:
- Jul 22, 2014, 9:37:16 AM (9 years ago)
- Branches:
- (u'spielwiese', 'd1b01e9d51ade4b46b745d3bada5c5f3696be3a8')
- Children:
- 0c42a847c2651462997b32adb623b79f38d133f5
- Parents:
- 638c230a7830a70d265a617a0f2f2fa0505f2ec0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libpolys/coeffs/numbers.cc
r638c230 ra62201 69 69 } 70 70 71 void ndPower(number a, int i, number * res, const coeffs r) 72 { 73 if (i==0) { 74 *res = n_Init(1, r); 75 } else if (i==1) { 76 *res = n_Copy(a, r); 77 } else if (i==2) { 78 *res = n_Mult(a, a, r); 79 } else if (i<0) { 80 number b = n_Invers(a, r); 81 ndPower(b, -i, res, r); 82 n_Delete(&b, r); 83 } else { 84 ndPower(a, i/2, res, r); 85 n_InpMult(*res, *res, r); 86 if (i&1) { 87 n_InpMult(*res, a, r); 88 } 89 } 90 } 71 91 #ifdef LDEBUG 72 92 void nDBDummy1(number* d,char *, int) { *d=NULL; } … … 85 105 { 86 106 Werror("ChineseRemainder not implemented for %s (c=%d)",r->cfCoeffString(r),getCoeffType(r)); 87 return n_Init(0,r); 107 return n_Init(0,r); 88 108 } 89 109 … … 105 125 if( (c != 0) && !ret ) 106 126 { 107 number ch = n_Init( c, r ); 127 number ch = n_Init( c, r ); 108 128 number g = n_Gcd( ch, a, r ); 109 129 ret = !n_IsOne (g, r); … … 111 131 n_Delete(&g, r); 112 132 } 113 return ret; 133 return ret; 114 134 } 115 135 … … 143 163 c = n_Init(1, r); 144 164 return; 145 } 165 } 146 166 147 167 number &curr = numberCollectionEnumerator.Current(); 148 168 149 169 #ifdef HAVE_RINGS 150 /// TODO: move to a separate implementation 170 /// TODO: move to a separate implementation 151 171 if (nCoeff_is_Ring(r)) 152 172 { … … 154 174 { 155 175 c = n_GetUnit(curr, r); 156 176 157 177 if (!n_IsOne(c, r)) 158 178 { … … 160 180 161 181 n_InpMult(curr, inv, r); 162 182 163 183 while( numberCollectionEnumerator.MoveNext() ) 164 184 { … … 168 188 } 169 189 170 n_Delete(&inv, r); 171 } 190 n_Delete(&inv, r); 191 } 172 192 } else c = n_Init(1, r); 173 193 174 194 return; 175 195 } … … 186 206 187 207 curr = n_Init(1, r); // ??? 188 208 189 209 number inv = n_Invers(t, r); 190 210 191 211 while( numberCollectionEnumerator.MoveNext() ) 192 212 { … … 195 215 // n_Normalize(n, r); // ? 196 216 } 197 217 198 218 n_Delete(&inv, r); 199 219 … … 218 238 if ( nCoeff_has_simple_Alloc(r) && nCoeff_has_simple_Alloc(aRing) ) 219 239 return a; 220 240 else 221 241 return n_Copy(a, r); 222 242 } … … 255 275 256 276 number ndInitMPZ(mpz_t m, const coeffs r) 257 { 277 { 258 278 return n_Init( mpz_get_si(m), r); 259 279 } … … 281 301 NULL, /* n_algExt */ 282 302 NULL, /* n_transExt */ 283 #endif 303 #endif 284 304 ngcInitChar, /* n_long_C */ 285 305 #ifdef HAVE_RINGS … … 294 314 NULL, /* n_Z2m */ 295 315 #endif 296 NULL 316 NULL /* n_CF */ 297 317 }; 298 318 … … 335 355 n->cfInitMPZ = ndInitMPZ; 336 356 n->cfMPZ = ndMPZ; 357 n->cfPower = ndPower; 337 358 338 359 // n->cfKillChar = ndKillChar; /* dummy */ … … 343 364 n->cfFarey = ndFarey; 344 365 n->cfParDeg = ndParDeg; 345 366 346 367 n->cfParameter = ndParameter; 347 368 … … 357 378 #endif 358 379 359 #ifdef fACTORY360 380 n->convSingNFactoryN=ndConvSingNFactoryN; 361 381 n->convFactoryNSingN=ndConvFactoryNSingN; 362 #endif 363 382 364 383 BOOLEAN nOK=TRUE; 365 384 // init … … 378 397 if (n->cfExactDiv==NULL) n->cfExactDiv=n->cfDiv; 379 398 if (n->cfSubringGcd==NULL) n->cfSubringGcd=n->cfGcd; 380 399 381 400 #ifdef HAVE_RINGS 382 401 if (n->cfGetUnit==NULL) n->cfGetUnit=n->cfCopy; … … 413 432 414 433 assume( (n->iNumberOfParameters == 0 && n->pParameterNames == NULL) || 415 (n->iNumberOfParameters > 0 && n->pParameterNames != NULL) ); 434 (n->iNumberOfParameters > 0 && n->pParameterNames != NULL) ); 416 435 417 436 assume(n->cfParameter!=NULL); 418 437 assume(n->cfParDeg!=NULL); 419 438 420 439 assume(n->cfRead!=NULL); 421 440 assume(n->cfNormalize!=NULL); … … 427 446 assume(n->cfIsMOne!=NULL); 428 447 assume(n->cfGreaterZero!=NULL); 429 assume(n->cfPower!=NULL);430 448 assume(n->cfGetDenom!=NULL); 431 449 assume(n->cfGetNumerator!=NULL); … … 441 459 assume(n->cfClearContent != NULL); 442 460 assume(n->cfClearDenominators != NULL); 443 461 444 462 #ifdef LDEBUG 445 463 if(n->cfDBTest==NULL) … … 447 465 #endif 448 466 assume(n->type==t); 449 467 450 468 #ifndef SING_NDEBUG 451 469 if(n->cfKillChar==NULL) Warn("cfKillChar is NULL for coeff %d",t); … … 454 472 if(n->cfCoeffString==ndCoeffString) Warn("cfCoeffString is undefined for coeff %d",t); 455 473 #endif 456 474 457 475 if( n->nNULL == NULL ) 458 476 n->nNULL = n_Init(0, n); // may still remain NULL … … 526 544 527 545 void n_Print(number& a, const coeffs r) 528 { 529 assume(r != NULL); 530 n_Test(a,r); 531 532 StringSetS(""); 533 n_Write(a, r); 546 { 547 assume(r != NULL); 548 n_Test(a,r); 549 550 StringSetS(""); 551 n_Write(a, r); 534 552 { char* s = StringEndS(); Print("%s", s); omFree(s); } 535 553 }
Note: See TracChangeset
for help on using the changeset viewer.