Changeset 41072b in git
- Timestamp:
- Oct 11, 2011, 2:03:55 PM (12 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a657104b677b4c461d018cbf3204d72d34ad66a9')
- Children:
- 3e70950f6eff7e879a05817dd9e4bb45aeb175ca
- Parents:
- 0fd6d8111bc8e9daf631bcceb78381f4561becbb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/int_rat.cc
r0fd6d8 r41072b 54 54 { 55 55 int g = intgcd( n, d ); 56 if ( d < 0 ) 57 { 58 mpz_init_set_si( &_num, -n / g ); 59 mpz_init_set_si( &_den, -d / g ); 60 } 61 else 62 { 63 mpz_init_set_si( &_num, n / g ); 64 mpz_init_set_si( &_den, d / g ); 65 } 56 if ( d < 0 ) g= -g; 57 mpz_init_set_si( &_num, n / g ); 58 mpz_init_set_si( &_den, d / g ); 66 59 } 67 60 } … … 200 193 if ( mpz_cmp_si( &g, 1 ) == 0 ) 201 194 { 202 203 204 205 206 } 207 else 208 { 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 195 mpz_mul( &n, &_den, &MPQNUM( c ) ); 196 mpz_mul( &g, &_num, &MPQDEN( c ) ); 197 mpz_add( &n, &n, &g ); 198 mpz_mul( &d, &_den, &MPQDEN( c ) ); 199 } 200 else 201 { 202 MP_INT tmp1; 203 MP_INT tmp2; 204 mpz_init( &tmp1 ); 205 mpz_divexact( &tmp1, &_den, &g ); 206 mpz_init( &tmp2 ); 207 mpz_divexact( &tmp2, &MPQDEN( c ), &g ); 208 mpz_mul( &d, &tmp2, &_den ); 209 mpz_mul( &tmp2, &tmp2, &_num ); 210 mpz_mul( &tmp1, &tmp1, &MPQNUM( c ) ); 211 mpz_add( &n, &tmp1, &tmp2 ); 212 mpz_gcd( &g, &n, &d ); 213 if ( mpz_cmp_si( &g, 1 ) != 0 ) 214 { 215 mpz_divexact( &n, &n, &g ); 216 mpz_divexact( &d, &d, &g ); 217 } 218 mpz_clear( &tmp1 ); 219 mpz_clear( &tmp2 ); 227 220 } 228 221 mpz_clear( &g ); … … 230 223 if ( mpz_cmp_si( &d, 1 ) == 0 ) 231 224 { 232 mpz_clear( &d ); 233 if ( mpz_is_imm( &n ) ) 234 { 235 InternalCF * res = int2imm( mpz_get_si( &n ) ); 236 mpz_clear( &n ); 237 return res; 238 } 239 else 240 { 241 return new InternalInteger( n ); 242 } 243 } 244 else 245 return new InternalRational( n, d ); 225 mpz_clear( &d ); 226 if ( mpz_is_imm( &n ) ) 227 { 228 InternalCF * res = int2imm( mpz_get_si( &n ) ); 229 mpz_clear( &n ); 230 return res; 231 } 232 else 233 { 234 return new InternalInteger( n ); 235 } 236 } 237 else 238 { 239 return new InternalRational( n, d ); 240 } 246 241 } 247 242 … … 306 301 ASSERT( ! ::is_imm( c ) && c->levelcoeff() == RationalDomain, "illegal domain" ); 307 302 MP_INT n, d; 303 mpz_init( &n ); mpz_init( &d ); 308 304 309 305 if ( this == c ) 310 306 { 311 mpz_init( &n ); mpz_init( &d );312 307 mpz_mul( &n, &_num, &_num ); 313 308 mpz_mul( &d, &_den, &_den ); … … 317 312 MP_INT g1, g2, tmp1, tmp2; 318 313 mpz_init( &g1 ); mpz_init( &g2 ); 319 mpz_init( &n ); mpz_init( &d );320 314 mpz_gcd( &g1, &_num, &MPQDEN( c ) ); 321 315 mpz_gcd( &g2, &_den, &MPQNUM( c ) ); … … 523 517 if ( cc == 0 ) 524 518 return this; 525 else if ( cc < 0 ) 526 { 527 mpz_init( &n ); 519 else 520 { 521 mpz_init( &n ); 522 if ( cc < 0 ) 523 { 528 524 mpz_mul_ui( &n, &_den, -cc ); 529 525 mpz_sub( &n, &_num, &n ); 530 } 531 else 532 { 533 mpz_init( &n ); 526 } 527 else 528 { 534 529 mpz_mul_ui( &n, &_den, cc ); 535 530 mpz_add( &n, &_num, &n ); 536 } 531 } 532 } 537 533 } 538 534 else
Note: See TracChangeset
for help on using the changeset viewer.