Changeset f9aada in git for Singular/GMPrat.cc
- Timestamp:
- Aug 6, 2001, 2:50:50 PM (23 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- c794a95c85e7ae1437369ab150d85b7c4ff17fd0
- Parents:
- b87513c30ef67e4ec83bdb49804f182f9903f736
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/GMPrat.cc
rb87513c rf9aada 31 31 // Miscellaneous 32 32 // ---------------------------------------------------------------------------- 33 extern int mmInit();34 static int GMPIsInitialized=mmInit();35 33 36 34 Rational Rational::save; // dummy variable 37 Rational RAT_EPS("1e-15"); // epsilon used in transcendental functions38 39 // ----------------------------------------------------------------------------40 // the number Pi up to 25, 50, 75 and 100 digits41 // ----------------------------------------------------------------------------42 43 //Rational RAT_PI_25("3.141592653589793238462643");44 //Rational RAT_PI_50("3.1415926535897932384626433832795028841971693993751");45 //Rational RAT_PI_75("3.141592653589793238462643383279502884197169399375105820974944592307816406286");46 //Rational RAT_PI_100("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068");47 //Rational RAT_PI(RAT_PI_25);48 49 35 50 36 // ---------------------------------------------------------------------------- … … 102 88 mpq_init( p->rat ); 103 89 mpq_set_ui( p->rat,(unsigned long)a,1 ); 104 }105 106 Rational::Rational( short int a )107 {108 p = new rep;109 mpq_init( p->rat );110 mpq_set_si( p->rat,(long int)a,1 );111 }112 113 Rational::Rational( unsigned short int a )114 {115 p = new rep;116 mpq_init( p->rat );117 mpq_set_ui( p->rat,(unsigned long int)a,1 );118 }119 120 Rational::Rational( char a )121 {122 p = new rep;123 mpq_init( p->rat );124 mpq_set_si( p->rat,(long int)a,1 );125 }126 127 Rational::Rational( unsigned char a )128 {129 p = new rep;130 mpq_init( p->rat );131 mpq_set_ui( p->rat,(unsigned long int)a,1 );132 90 } 133 91 … … 283 241 } 284 242 285 Rational::Rational(short int a, unsigned short int b)286 {287 p=new rep;288 mpq_init(p->rat);289 mpq_set_si(p->rat,(long int) a,(unsigned long int) b);290 mpq_canonicalize(p->rat);291 }292 293 Rational::Rational(unsigned short int a, unsigned short int b)294 {295 p=new rep;296 mpq_init(p->rat);297 mpq_set_ui(p->rat,(unsigned long int) a,(unsigned long int) b);298 mpq_canonicalize(p->rat);299 }300 301 Rational::Rational(char a, unsigned char b)302 {303 p=new rep;304 mpq_init(p->rat);305 mpq_set_si(p->rat,(long int) a,(unsigned long int) b);306 mpq_canonicalize(p->rat);307 }308 309 Rational::Rational(unsigned char a, unsigned char b)310 {311 p=new rep;312 mpq_init(p->rat);313 mpq_set_ui(p->rat,(unsigned long int) a,(unsigned long int) b);314 mpq_canonicalize(p->rat);315 }316 317 243 Rational::Rational(const Rational& a, const Rational& b) 318 244 { … … 340 266 } 341 267 342 Rational::Rational(short int a, short int b)343 {344 if (b<0) a=-a;345 p=new rep;346 mpq_init(p->rat);347 mpq_set_si(p->rat,(long int) a,(unsigned long int) abs(b));348 mpq_canonicalize(p->rat);349 }350 351 Rational::Rational(char a, char b)352 {353 if (b<0) a=-a;354 p=new rep;355 mpq_init(p->rat);356 mpq_set_si(p->rat,(long int) a,(unsigned long int) abs(b));357 mpq_canonicalize(p->rat);358 }359 360 268 Rational::Rational(char *sn, char *sd) 361 269 { … … 384 292 // Assignment operators 385 293 // ---------------------------------------------------------------------------- 386 387 Rational& Rational::operator=(long int a)388 {389 disconnect();390 mpq_set_si(p->rat,a,1);391 return *this;392 }393 394 Rational& Rational::operator=(unsigned long int a)395 {396 disconnect();397 mpq_set_ui(p->rat,a,1);398 return *this;399 }400 401 294 Rational& Rational::operator=(int a) 402 295 { 403 296 disconnect(); 404 297 mpq_set_si(p->rat,(long int) a,1); 405 return *this;406 }407 408 Rational& Rational::operator=(unsigned int a)409 {410 disconnect();411 mpq_set_ui(p->rat,(unsigned long int) a,1);412 return *this;413 }414 415 Rational& Rational::operator=(short int a)416 {417 disconnect();418 mpq_set_si(p->rat,(long int) a,1);419 return *this;420 }421 422 Rational& Rational::operator=(unsigned short int a)423 {424 disconnect();425 mpq_set_ui(p->rat,(unsigned long int) a,1);426 return *this;427 }428 429 Rational& Rational::operator=(char a)430 {431 disconnect();432 mpq_set_si(p->rat,(long int) a,1);433 return *this;434 }435 436 Rational& Rational::operator=(unsigned char a)437 {438 disconnect();439 mpq_set_ui(p->rat,(unsigned long int) a,1);440 298 return *this; 441 299 } … … 1014 872 } 1015 873 1016 Rational1017 sqrt(const Rational& a)1018 {1019 Rational1020 erg;1021 mpz_t1022 h1,1023 h2;1024 1025 mpz_init_set(h1,mpq_numref(a.p->rat));1026 mpz_init(h2);1027 mpz_set_ui(h2,1);1028 mpz_mul(h1,h1,mpq_denref(a.p->rat));1029 mpz_mul(h1,h1,mpq_denref(RAT_EPS.p->rat));1030 mpz_mul(h1,h1,mpq_denref(RAT_EPS.p->rat));1031 mpz_div(h1,h1,mpq_numref(RAT_EPS.p->rat));1032 mpz_div(h1,h1,mpq_numref(RAT_EPS.p->rat));1033 mpz_sqrt(h1,h1);1034 mpz_mul(h2,mpq_denref(a.p->rat),mpq_denref(RAT_EPS.p->rat));1035 mpz_div(h2,h2,mpq_numref(RAT_EPS.p->rat));1036 mpq_set_num(erg.p->rat,h1);1037 mpq_set_den(erg.p->rat,h2);1038 mpq_canonicalize(erg.p->rat);1039 mpz_clear(h1);1040 mpz_clear(h2);1041 return erg;1042 }1043 1044 Rational1045 exp(const Rational& a)1046 {1047 Rational1048 erg(1),1049 pow(a),1050 fak(1),1051 rem,1052 i(2);1053 1054 do{1055 erg+=pow/fak;1056 fak*=i++;1057 pow*=a;1058 rem=(((Rational)2)*abs(pow))/fak;1059 if (rem<RAT_EPS) break;1060 } while (true);1061 return erg;1062 }1063 1064 Rational1065 sin(const Rational& a)1066 {1067 Rational1068 erg(a),1069 pow(a),1070 fak(6),1071 rem,1072 i(4),1073 aq(a);1074 1075 aq*=a;1076 do {1077 pow*=-aq;1078 erg+=pow/fak;1079 fak*=i++;1080 fak*=i++;1081 rem=(abs(pow*aq))/fak;1082 if (rem<RAT_EPS) break;1083 } while(true);1084 return erg;1085 }1086 1087 Rational1088 cos(const Rational& a)1089 {1090 Rational1091 erg(1),1092 pow(1),1093 fak(2),1094 rem,1095 i(3),1096 aq(a);1097 1098 aq*=a;1099 do {1100 pow*=-aq;1101 erg+=pow/fak;1102 fak*=i++;1103 fak*=i++;1104 rem=(abs(pow*aq))/fak;1105 if (rem<RAT_EPS) break;1106 } while(true);1107 return erg;1108 }1109 1110 Rational1111 tan(const Rational& a)1112 {1113 Rational1114 ergsin(a),1115 ergcos(1),1116 pow(a),1117 fak(2),1118 i(3),1119 rem,1120 eps2(((Rational)2)*RAT_EPS);1121 1122 do{1123 pow*=a*(-1);1124 ergcos+=pow/fak;1125 pow*=a;1126 fak*=i++;1127 ergsin+=pow/fak;1128 fak*=i++;1129 rem=(abs(pow*a*a))/fak;1130 if (rem<eps2) break;1131 } while(true);1132 return ergsin/ergcos;1133 }1134 1135 874 Rational gcd( const Rational &a,const Rational &b ) 1136 875 {
Note: See TracChangeset
for help on using the changeset viewer.