Changeset 210852 in git
- Timestamp:
- May 29, 2010, 5:45:24 PM (13 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'c18334b998a8adbf0013b8e1ce0824774019443e')
- Children:
- 5b702faf0ba7a3d669f0c92068b7320cf1a40a4e
- Parents:
- 4c09bbcd5e80cefbcef0abdd5891aad7a7ba2f72
- git-author:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2010-05-29 17:45:24+02:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:54:58+01:00
- Location:
- coeffs
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
coeffs/gnumpc.cc
r4c09bb r210852 535 535 assume( getCoeffType(aRing) == n_Zp ); 536 536 537 if ( from != NULL )537 if ( from != NULL ) 538 538 return ngcInit(npInt(from, aRing), r); 539 539 else 540 540 return NULL; 541 541 } 542 543 544 542 545 543 static number ngcCopyMap(number from, const coeffs aRing, const coeffs r) … … 557 555 } 558 556 559 560 557 nMapFunc ngcSetMap(const coeffs src, const coeffs dst) 561 558 { 562 559 assume( getCoeffType(dst) == ID ); 563 560 564 if (nField_is_Q(src))561 if (nField_is_Q(src)) 565 562 { 566 563 return ngcMapQ; … … 574 571 return ngcCopyMap; 575 572 } 576 if (nField_is_R(src))573 if (nField_is_R(src)) 577 574 { 578 575 return ngcMapR; … … 585 582 } 586 583 587 -
coeffs/gnumpfl.cc
r4c09bb r210852 23 23 //ring ngfMapRing; // to be used also in gnumpc.cc 24 24 25 /// Our Type! 26 static const n_coeffType ID = n_gnump_R; 27 25 28 static number ngfMapP(number from, const coeffs src, const coeffs dst) 26 29 { … … 52 55 } 53 56 54 nMapFunc ngfSetMap(const ring src, const ring dst)55 {56 if (rField_is_Q(src))57 {58 return ngfMapQ;59 }60 if (rField_is_long_R(src))61 {62 return ngfCopy;63 }64 if (rField_is_R(src))65 {66 return ngfMapR;67 }68 if (rField_is_Zp(src))69 {70 ngfMapRing=src;71 return ngfMapP;72 }73 if (rField_is_long_C(src))74 {75 return ngfMapC;76 }77 return NULL;78 }79 80 57 /*2 81 58 * n := i … … 83 60 number ngfInit (int i, const coeffs r) 84 61 { 62 assume( getCoeffType(r) == ID ); 63 85 64 gmp_float* n= new gmp_float( (double)i ); 86 65 return (number)n; … … 92 71 int ngfInt(number &i, const coeffs r) 93 72 { 73 assume( getCoeffType(r) == ID ); 74 94 75 double d=(double)*(gmp_float*)i; 95 76 if (d<0.0) … … 115 96 void ngfDelete (number * a, const coeffs r) 116 97 { 98 assume( getCoeffType(r) == ID ); 99 117 100 if ( *a != NULL ) 118 101 { … … 127 110 number ngfCopy(number a, const coeffs r) 128 111 { 112 assume( getCoeffType(r) == ID ); 113 129 114 gmp_float* b= new gmp_float( *(gmp_float*)a ); 130 115 return (number)b; … … 136 121 number ngfNeg (number a, const coeffs r) 137 122 { 123 assume( getCoeffType(r) == ID ); 124 138 125 *(gmp_float*)a= -(*(gmp_float*)a); 139 126 return (number)a; … … 143 130 * 1/a 144 131 */ 145 number ngfInvers(number a, const coeffs R) 146 { 147 gmp_float* r= NULL; 132 number ngfInvers(number a, const coeffs r) 133 { 134 assume( getCoeffType(r) == ID ); 135 136 gmp_float* f= NULL; 148 137 if (((gmp_float*)a)->isZero() ) 149 138 { … … 162 151 number ngfAdd (number a, number b, const coeffs R) 163 152 { 153 assume( getCoeffType(R) == ID ); 154 164 155 gmp_float* r= new gmp_float( (*(gmp_float*)a) + (*(gmp_float*)b) ); 165 156 return (number)r; … … 171 162 number ngfSub (number a, number b, const coeffs R) 172 163 { 164 assume( getCoeffType(R) == ID ); 165 173 166 gmp_float* r= new gmp_float( (*(gmp_float*)a) - (*(gmp_float*)b) ); 174 167 return (number)r; … … 180 173 number ngfMult (number a, number b, const coeffs R) 181 174 { 175 assume( getCoeffType(R) == ID ); 176 182 177 gmp_float* r= new gmp_float( (*(gmp_float*)a) * (*(gmp_float*)b) ); 183 178 return (number)r; … … 189 184 number ngfDiv (number a, number b, const coeffs r) 190 185 { 186 assume( getCoeffType(r) == ID ); 187 191 188 if ( ((gmp_float*)b)->isZero() ) 192 189 { … … 204 201 number ngfPower (number x, int exp, const coeffs r) 205 202 { 203 assume( getCoeffType(r) == ID ); 204 206 205 if ( exp == 0 ) 207 206 { … … 234 233 BOOLEAN ngfIsZero (number a, const coeffs r) 235 234 { 235 assume( getCoeffType(r) == ID ); 236 236 237 return ( ((gmp_float*)a)->isZero() ); 237 238 } … … 242 243 BOOLEAN ngfGreaterZero (number a, const coeffs r) 243 244 { 245 assume( getCoeffType(r) == ID ); 246 244 247 return (((gmp_float*)a)->sign() > 0); 245 248 } … … 250 253 BOOLEAN ngfGreater (number a, number b, const coeffs r) 251 254 { 255 assume( getCoeffType(r) == ID ); 256 252 257 return ( (*(gmp_float*)a) > (*(gmp_float*)b) ); 253 258 } … … 258 263 BOOLEAN ngfEqual (number a, number b, const coeffs r) 259 264 { 265 assume( getCoeffType(r) == ID ); 266 260 267 return ( (*(gmp_float*)a) == (*(gmp_float*)b) ); 261 268 } … … 266 273 BOOLEAN ngfIsOne (number a, const coeffs r) 267 274 { 275 assume( getCoeffType(r) == ID ); 276 268 277 return ((gmp_float*)a)->isOne(); 269 278 } … … 274 283 BOOLEAN ngfIsMOne (number a, const coeffs r) 275 284 { 285 assume( getCoeffType(r) == ID ); 286 276 287 return ((gmp_float*)a)->isMOne(); 277 288 } … … 305 316 const char * ngfRead (const char * start, number * a, const coeffs r) 306 317 { 318 assume( getCoeffType(r) == ID ); 319 307 320 char *s= (char *)start; 308 321 … … 362 375 void ngfWrite (number &a, const coeffs r) 363 376 { 377 assume( getCoeffType(r) == ID ); 378 379 extern size_t gmp_output_digits; 364 380 char *out; 365 381 if ( a != NULL ) 366 382 { 367 out= floatToStr(*(gmp_float*)a, gmp_output_digits);383 out= floatToStr(*(gmp_float*)a, gmp_output_digits, r); 368 384 StringAppendS(out); 369 385 //omFreeSize((void *)out, (strlen(out)+1)* sizeof(char) ); … … 376 392 } 377 393 394 static BOOLEAN ngfCoeffsEqual(const coeffs r, n_coeffType n, int) 395 { 396 assume( getCoeffType(r) == ID ); 397 398 return (n == ID); 399 }; 400 401 void ngfInitChar(coeffs n, int) 402 { 403 assume( getCoeffType(n) == ID ); 404 405 n->cfDelete = ngfDelete; 406 n->nNormalize=ndNormalize; 407 n->cfInit = ngfInit; 408 n->n_Int = ngfInt; 409 n->nAdd = ngfAdd; 410 n->nSub = ngfSub; 411 n->nMult = ngfMult; 412 n->nDiv = ngfDiv; 413 n->nExactDiv= ngfDiv; 414 n->nNeg = ngfNeg; 415 n->nInvers = ngfInvers; 416 n->cfCopy = ngfCopy; 417 n->nGreater = ngfGreater; 418 n->nEqual = ngfEqual; 419 n->nIsZero = ngfIsZero; 420 n->nIsOne = ngfIsOne; 421 n->nIsMOne = ngfIsMOne; 422 n->nGreaterZero = ngfGreaterZero; 423 n->cfWrite = ngfWrite; 424 n->nRead = ngfRead; 425 n->nPower = ngfPower; 426 n->cfSetMap = ngfSetMap; 427 #ifdef LDEBUG 428 n->nDBTest = ndDBTest; // not yet implemented: ngfDBTest 429 #endif 430 431 number ngfMapQ(number from, const coeffs aRing, const coeffs r) 432 { 433 assume( getCoeffType(r) == ID ); 434 assume( getCoeffType(aRing) == n_Q ); 435 436 if ( from != NULL ) 437 { 438 gmp_float *res=new gmp_float(numberFieldToFloat(from,QTOF)); 439 return (number)res; 440 } 441 else 442 return NULL; 443 } 444 445 static number ngfMapR(number from, const coeffs aRing, const coeffs r) 446 { 447 assume( getCoeffType(r) == ID ); 448 assume( getCoeffType(aRing) == n_R ); 449 450 if ( from != NULL ) 451 { 452 gmp_float *res=new gmp_float((double)nrFloat(from)); 453 return (number)res; 454 } 455 else 456 return NULL; 457 } 458 459 static number ngfMapP(number from, const coeffs aRing, const coeffs r) 460 { 461 assume( getCoeffType(r) == ID ); 462 assume( getCoeffType(aRing) == n_Zp ); 463 464 if ( from != NULL ) 465 return ngfInit(npInt(from,src), dst); 466 else 467 return NULL; 468 } 469 470 static number ngfMapC(number from, const coeffs aRing, const coeffs r) 471 { 472 assume( getCoeffType(r) == ID ); 473 assume( getCoeffType(aRing) == n_long_C ); 474 475 if ( (from != NULL) || ((gmp_complex*)from)->real().isZero() ) 476 { 477 gmp_float *res=new gmp_float(((gmp_complex*)from)->real()); 478 return (number)res; 479 } 480 else 481 return NULL; 482 } 483 484 nMapFunc ngfSetMap(const coeffs src, const coeffs dst) 485 { 486 assume( getCoeffType(dst) == ID ); 487 488 if (nField_is_Q(src)) 489 { 490 return ngfMapQ; 491 } 492 if (nField_is_long_R(src)) 493 { 494 return ngfCopy; 495 } 496 if (nField_is_R(src)) 497 { 498 return ngfMapR; 499 } 500 if (nField_is_long_C(src)) 501 { 502 return ngfMapC; 503 } 504 if (nField_is_Zp(src)) 505 { 506 return ngfMapP; 507 } 508 return NULL; 509 } 510 511 -
coeffs/gnumpfl.h
r4c09bb r210852 10 10 #include "coeffs.h" 11 11 12 /// Get a mapping function from src into the domain of this type: 13 nMapFunc ngfSetMap(const coeffs src, const coeffs dst); 14 15 /// Initialize r 16 void ngfInitChar(coeffs r, int); 17 18 /// test, whether r is an instance of nInitCoeffs(n, parameter) */ 19 static BOOLEAN ngfCoeffsEqual(const coeffs r, n_coeffType n, int parameter); 20 21 22 /* // Private interface should be hidden!!! 23 /// Note: MAY NOT WORK AS EXPECTED! 12 24 BOOLEAN ngfGreaterZero(number za, const coeffs r); 13 25 BOOLEAN ngfGreater(number a, number b, const coeffs r); … … 25 37 number ngfDiv(number a, number b, const coeffs r); 26 38 void ngfPower(number x, int exp, number *lu, const coeffs r); 27 number ngfCopy(number a );39 number ngfCopy(number a, const coeffs r); 28 40 number ngf_Copy(number a, coeffs r); 29 41 const char * ngfRead (const char *s, number *a, const coeffs r); … … 32 44 void ngfDelete(number *a, const coeffs r); 33 45 34 nMapFunc ngfSetMap(const coeffs src, const coeffs dst);35 36 46 void setGMPFloatDigits( size_t digits, size_t rest ); 37 47 number ngfMapQ(number from, const coeffs r); 48 */ 38 49 #endif
Note: See TracChangeset
for help on using the changeset viewer.