Feature #15166 » rational.c.patch
| rational.c (working copy) | ||
|---|---|---|
| 
     inline static long 
   | 
||
| 
     i_gcd(long x, long y) 
   | 
||
| 
     { 
   | 
||
| 
         unsigned long u, v, t; 
   | 
||
| 
         int shift; 
   | 
||
| 
         unsigned long u, v, uz, vz, shift; 
   | 
||
| 
         long diff; 
   | 
||
| 
         if (x < 0) 
   | 
||
| 
     	x = -x; 
   | 
||
| 
             x = -x; 
   | 
||
| 
         if (y < 0) 
   | 
||
| 
     	y = -y; 
   | 
||
| 
             y = -y; 
   | 
||
| 
         if (x == 0) 
   | 
||
| 
     	return y; 
   | 
||
| 
         if (y == 0) 
   | 
||
| 
     	return x; 
   | 
||
| 
             return y; 
   | 
||
| 
         if (y == 0 || x == y) 
   | 
||
| 
             return x; 
   | 
||
| 
         u = (unsigned long)x; 
   | 
||
| 
         v = (unsigned long)y; 
   | 
||
| 
         for (shift = 0; ((u | v) & 1) == 0; ++shift) { 
   | 
||
| 
     	u >>= 1; 
   | 
||
| 
     	v >>= 1; 
   | 
||
| 
         } 
   | 
||
| 
         while ((u & 1) == 0) 
   | 
||
| 
     	u >>= 1; 
   | 
||
| 
         uz = ntz_intptr(u); 
   | 
||
| 
         vz = ntz_intptr(v); 
   | 
||
| 
         shift = uz > vz ? vz : uz; 
   | 
||
| 
         u >>= uz; 
   | 
||
| 
         do { 
   | 
||
| 
     	while ((v & 1) == 0) 
   | 
||
| 
     	    v >>= 1; 
   | 
||
| 
             v >>= vz; 
   | 
||
| 
             diff = v - u; 
   | 
||
| 
             if (diff == 0) 
   | 
||
| 
                 break; 
   | 
||
| 
             vz = ntz_intptr(diff); 
   | 
||
| 
             if (v < u) 
   | 
||
| 
                 u = v; 
   | 
||
| 
             v = diff < 0 ? -diff : diff; 
   | 
||
| 
         } while(true); 
   | 
||
| 
     	if (u > v) { 
   | 
||
| 
     	    t = v; 
   | 
||
| 
     	    v = u; 
   | 
||
| 
     	    u = t; 
   | 
||
| 
     	} 
   | 
||
| 
     	v = v - u; 
   | 
||
| 
         } while (v != 0); 
   | 
||
| 
         return (long)(u << shift); 
   | 
||
| 
         return u << shift; 
   | 
||
| 
     } 
   | 
||
| 
     inline static VALUE 
   | 
||