Changeset 210852 in git for coeffs/gnumpfl.cc
- Timestamp:
- May 29, 2010, 5:45:24 PM (14 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.