Changeset 3aae0e in git
- Timestamp:
- May 3, 2010, 8:40:12 PM (13 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- 3de81d0751fbbbc4448d3fd2531c9a6166149a7c
- Parents:
- 8e0242295b4d15e0888fcf82a2aee88da415872f
- git-author:
- Oleksandr Motsak <motsak@mathematik.uni-kl.de>2010-05-03 20:40:12+02:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:50:25+01:00
- Location:
- coeffs
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
coeffs/gnumpc.cc
r8e0242 r3aae0e 20 20 21 21 22 #include "shortfl.h" 23 24 22 25 #ifdef LDEBUG 23 26 // not yet implemented … … 34 37 #endif 35 38 36 const n_coeffType ID = n_long_C;39 static const n_coeffType ID = n_long_C; 37 40 38 41 number ngcMapQ(number from, const coeffs r, const coeffs aRing) … … 69 72 assume( getCoeffType(aRing) == n_R ); 70 73 71 union nf72 {73 float _f;74 number _n;75 nf(float f) {_f = f;}76 nf(number n) {_n = n;}77 float F() const {return _f;}78 number N() const {return _n;}79 };80 81 74 if ( from != NULL ) 82 75 { 83 gmp_complex *res=new gmp_complex((double)n f(from).F());76 gmp_complex *res=new gmp_complex((double)nrFloat(from)); 84 77 return (number)res; 85 78 } -
coeffs/numbers.cc
r8e0242 r3aae0e 28 28 #endif 29 29 30 #ifndef assume 31 # define assume(a) if(!(a)){ Werror( "Assumption: is wrong: %s\n", #a ); }; 32 #endif 33 34 30 35 //static int characteristic = 0; 31 36 extern int IsPrime(int p); … … 79 84 int ndSize(number a, const coeffs r) { return (int)n_IsZero(a,r)==FALSE; } 80 85 81 number ndCopy(number a) { return a; } 82 number nd_Copy(number a,const coeffs r) { return r->nCopy(a); } 86 number ndCopy(number a, const coeffs) { return a; } 87 number ndCopyMap(number a, const coeffs r, const coeffs aRing) 88 { 89 assume( getCoeffType(r) == getCoeffType(aRing) ); 90 assume( nField_has_simple_Alloc(r) && nField_has_simple_Alloc(aRing) ); 91 92 return a; 93 } 94 95 number nd_Copy(number a, const coeffs r) { return n_Copy(a, r); } 83 96 84 97 #ifdef HAVE_RINGS -
coeffs/numbers.h
r8e0242 r3aae0e 65 65 number ndGcd(number a, number b, const coeffs); 66 66 number ndCopy(number a, const coeffs r); 67 number ndCopyMap(number a, const coeffs r, const coeffs aRing); 68 67 69 void ndInpMult(number &a, number b, const coeffs r); 68 70 number ndInpAdd(number &a, number b, const coeffs r); -
coeffs/shortfl.cc
r8e0242 r3aae0e 8 8 */ 9 9 10 #include "shortfl.h" 11 10 12 #include <string.h> 11 13 #include "coeffs.h" 12 #include <mylimits.h>13 14 #include "output.h" 14 15 #include "numbers.h" 15 16 #include "longrat.h" 16 17 #include "mpr_complex.h" 17 #include "shortfl.h" 18 19 static float nrEps = 1.0e-3; 18 19 20 #include <mylimits.h> 21 // #include "limits.h" 22 #define MAX_INT_VAL INT_MAX 23 24 #ifndef assume 25 # define assume(a) if(!(a)){ Werror( "Assumption: is wrong: %s\n", #a ); }; 26 #endif 27 28 29 30 static const n_coeffType ID = n_R; 31 32 static const float nrEps = 1.0e-3; 33 20 34 union nf 21 35 { 22 36 float _f; 23 37 number _n; 24 nf(float f) {_f = f;} 25 nf(number n) {_n = n;} 26 float F() const {return _f;} 27 number N() const {return _n;} 38 39 nf(float f): _f(f){}; 40 41 nf(number n): _n(n){}; 42 43 inline float F() const {return _f;} 44 inline number N() const {return _n;} 28 45 }; 29 46 47 48 49 30 50 float nrFloat(number n) 31 51 { … … 33 53 } 34 54 55 35 56 BOOLEAN nrGreaterZero (number k, const coeffs r) 36 57 { 58 assume( getCoeffType(r) == ID ); 59 37 60 return nf(k).F() >= 0.0; 38 61 } … … 40 63 number nrMult (number a,number b, const coeffs r) 41 64 { 65 assume( getCoeffType(r) == ID ); 66 42 67 return nf(nf(a).F() * nf(b).F()).N(); 43 68 } … … 46 71 * create a number from int 47 72 */ 48 number nrInit (int i, const coeffs R) 49 { 50 float r = (float)i; 51 return nf(nf(r).F()).N(); 73 number nrInit (int i, const coeffs r) 74 { 75 assume( getCoeffType(r) == ID ); 76 77 float f = (float)i; 78 return nf(nf(f).F()).N(); 52 79 } 53 80 … … 55 82 * convert a number to int 56 83 */ 57 int nrInt(number &n, const coeffs R) 58 { 84 int nrInt(number &n, const coeffs r) 85 { 86 assume( getCoeffType(r) == ID ); 87 59 88 int i; 60 float r= nf(n).F();61 if (((float)INT_MIN <= r) || ((float)MAX_INT_VAL >= r))62 i = (int) r;89 float f = nf(n).F(); 90 if (((float)INT_MIN <= f) || ((float)MAX_INT_VAL >= f)) 91 i = (int)f; 63 92 else 64 93 i = 0; … … 78 107 } 79 108 80 number nrAdd (number a, number b, const coeffs R) 81 { 109 number nrAdd (number a, number b, const coeffs r) 110 { 111 assume( getCoeffType(r) == ID ); 112 82 113 float x = nf(a).F(); 83 114 float y = nf(b).F(); 84 float r= x + y;115 float f = x + y; 85 116 if (x > 0.0) 86 117 { 87 118 if (y < 0.0) 88 119 { 89 x = r/ (x - y);120 x = f / (x - y); 90 121 if (x < 0.0) 91 122 x = -x; 92 123 if (x < nrEps) 93 r= 0.0;124 f = 0.0; 94 125 } 95 126 } … … 98 129 if (y > 0.0) 99 130 { 100 x = r/ (y - x);131 x = f / (y - x); 101 132 if (x < 0.0) 102 133 x = -x; 103 134 if (x < nrEps) 104 r = 0.0; 105 } 106 } 107 return nf(r).N(); 108 } 109 110 number nrSub (number a, number b, const coeffs R) 111 { 135 f = 0.0; 136 } 137 } 138 return nf(f).N(); 139 } 140 141 number nrSub (number a, number b, const coeffs r) 142 { 143 assume( getCoeffType(r) == ID ); 144 112 145 float x = nf(a).F(); 113 146 float y = nf(b).F(); 114 float r= x - y;147 float f = x - y; 115 148 if (x > 0.0) 116 149 { 117 150 if (y > 0.0) 118 151 { 119 x = r/ (x + y);152 x = f / (x + y); 120 153 if (x < 0.0) 121 154 x = -x; 122 155 if (x < nrEps) 123 r= 0.0;156 f = 0.0; 124 157 } 125 158 } … … 128 161 if (y < 0.0) 129 162 { 130 x = r/ (x + y);163 x = f / (x + y); 131 164 if (x < 0.0) 132 165 x = -x; 133 166 if (x < nrEps) 134 r= 0.0;135 } 136 } 137 return nf( r).N();167 f = 0.0; 168 } 169 } 170 return nf(f).N(); 138 171 } 139 172 140 173 BOOLEAN nrIsZero (number a, const coeffs r) 141 174 { 175 assume( getCoeffType(r) == ID ); 176 142 177 return (0.0 == nf(a).F()); 143 178 } … … 145 180 BOOLEAN nrIsOne (number a, const coeffs r) 146 181 { 182 assume( getCoeffType(r) == ID ); 183 147 184 float aa=nf(a).F()-1.0; 148 185 if (aa<0.0) aa=-aa; … … 152 189 BOOLEAN nrIsMOne (number a, const coeffs r) 153 190 { 191 assume( getCoeffType(r) == ID ); 192 154 193 float aa=nf(a).F()+1.0; 155 194 if (aa<0.0) aa=-aa; … … 159 198 number nrDiv (number a,number b, const coeffs r) 160 199 { 200 assume( getCoeffType(r) == ID ); 201 161 202 float n = nf(b).F(); 162 203 if (n == 0.0) … … 171 212 number nrInvers (number c, const coeffs r) 172 213 { 214 assume( getCoeffType(r) == ID ); 215 173 216 float n = nf(c).F(); 174 217 if (n == 0.0) … … 182 225 number nrNeg (number c, const coeffs r) 183 226 { 227 assume( getCoeffType(r) == ID ); 228 184 229 return nf(-nf(c).F()).N(); 185 230 } … … 187 232 BOOLEAN nrGreater (number a,number b, const coeffs r) 188 233 { 234 assume( getCoeffType(r) == ID ); 235 189 236 return nf(a).F() > nf(b).F(); 190 237 } … … 192 239 BOOLEAN nrEqual (number a,number b, const coeffs r) 193 240 { 241 assume( getCoeffType(r) == ID ); 242 194 243 number x = nrSub(a,b,r); 195 244 return nf(x).F() == nf((float)0.0).F(); … … 198 247 void nrWrite (number &a, const coeffs r) 199 248 { 249 assume( getCoeffType(r) == ID ); 250 200 251 StringAppend("%9.3e", nf(a).F()); 201 252 } … … 203 254 void nrPower (number a, int i, number * result, const coeffs r) 204 255 { 256 assume( getCoeffType(r) == ID ); 257 205 258 if (i==0) 206 259 { … … 217 270 } 218 271 272 namespace { 219 273 static const char* nrEatr(const char *s, float *r) 220 274 { … … 235 289 return s; 236 290 } 237 238 const char *nIllegalChar="illegal character in number"; 291 }; 239 292 240 293 const char * nrRead (const char *s, number *a, const coeffs r) 241 294 { 295 296 assume( getCoeffType(r) == ID ); 297 298 static const char *nIllegalChar="illegal character in number"; 299 242 300 const char *t; 243 301 const char *start=s; … … 294 352 } 295 353 296 /*2 297 * the last used charcteristic 298 */ 299 int nrGetChar() 300 { 301 return 0; 302 } 354 355 // the last used charcteristic 356 // int nrGetChar(){ return 0; } 357 303 358 304 359 #ifdef LDEBUG … … 306 361 * test valid numbers: not implemented yet 307 362 */ 308 //BOOLEAN nrDBTest(number a, const char *f, const int l) 309 //{ 310 // return TRUE; 311 //} 363 BOOLEAN nrDBTest(number a, const char *f, const int l, const coeffs r); 364 { 365 assume( getCoeffType(r) == ID ); 366 367 return TRUE; 368 } 312 369 #endif 313 370 371 static number nrMapP(number from, const coeffs r, const coeffs aRing) 372 { 373 assume( getCoeffType(r) == ID ); 374 assume( getCoeffType(aRing) == n_Zp ); 375 376 int i = (int)((long)from); 377 float f = (float)i; 378 return nf(f).N(); 379 } 380 381 static number nrMapLongR(number from, const coeffs r, const coeffs aRing) 382 { 383 assume( getCoeffType(r) == ID ); 384 assume( getCoeffType(aRing) == n_long_R ); 385 386 float t =(float)mpf_get_d((mpf_srcptr)from); 387 return nf(t).N(); 388 } 389 390 static number nrMapC(number from, const coeffs r, const coeffs aRing) 391 { 392 assume( getCoeffType(r) == ID ); 393 assume( getCoeffType(aRing) == n_long_C ); 394 395 gmp_float h = ((gmp_complex*)from)->real(); 396 float t =(float)mpf_get_d((mpf_srcptr)&h); 397 return nf(t).N(); 398 } 399 400 401 number nrMapQ(number from, const coeffs r, const coeffs aRing) 402 { 314 403 /* in longrat.h 315 404 #define SR_INT 1 … … 328 417 #define MPZ_CLEAR mpz_clear 329 418 330 number nrMapQ(number from) 331 { 419 assume( getCoeffType(r) == ID ); 420 assume( getCoeffType(aRing) == n_Q ); 421 332 422 mpz_t h; 333 423 mpz_ptr g,z,n; … … 423 513 } 424 514 425 static number nrMapP(number from, const coeffs R)426 {427 int i = (int)((long)from);428 float r = (float)i;429 return nf(r).N();430 }431 432 static number nrMapLongR(number from, const coeffs R)433 {434 float t =(float)mpf_get_d((mpf_srcptr)from);435 return nf(t).N();436 }437 static number nrMapC(number from, const coeffs r)438 {439 gmp_float h = ((gmp_complex*)from)->real();440 float t =(float)mpf_get_d((mpf_srcptr)&h);441 return nf(t).N();442 }443 515 444 516 nMapFunc nrSetMap(const coeffs src, const coeffs dst) 445 517 { 518 assume( getCoeffType(dst) == ID ); 519 446 520 if (nField_is_Q(src)) 447 521 { … … 454 528 if (nField_is_R(src)) 455 529 { 456 return ndCopy ;530 return ndCopyMap; 457 531 } 458 532 if(nField_is_Zp(src)) -
coeffs/shortfl.h
r8e0242 r3aae0e 27 27 void nrWrite (number &a, const coeffs r); 28 28 const char * nrRead (const char *s, number *a, const coeffs r); 29 int nrGetChar();30 29 #ifdef LDEBUG 31 BOOLEAN nrDBTest(number a, const coeffs , rconst char *f, const int l);30 BOOLEAN nrDBTest(number a, const coeffs r, const char *f, const int l); 32 31 #endif 33 32 33 /// Get a mapping function from src into the domain of this type: n_R 34 34 nMapFunc nrSetMap(const coeffs src, const coeffs dst); 35 35 36 float nrFloat(number n); 37 number nrMapQ(number from, const coeffs r); 36 // Where are the following used? 37 // int nrGetChar(); 38 // number nrMapQ(number from, const coeffs r, const coeffs aRing); 39 40 41 /// Converts a n_R number into a float. Needed by Maps 42 float nrFloat(number n); 43 38 44 #endif 39 45
Note: See TracChangeset
for help on using the changeset viewer.