| #include "precision.h" | |
| /* | |
| * Euclid's Algorithm | |
| * | |
| * Given u and v, calculated and return their greatest common divisor. | |
| */ | |
| precision pgcd(u, v) | |
| precision u, v; | |
| { | |
| precision u3 = pnew(pabs(pparm(u))), v3 = pnew(pabs(pparm(v))); | |
| precision q = pUndef, r = pUndef; | |
| while (pnez(v3)) { | |
| pdivmod(u3, v3, &q, &r); | |
| pset(&u3, v3); | |
| pset(&v3, r); | |
| } | |
| pdestroy(v3); | |
| pdestroy(q); pdestroy(r); | |
| pdestroy(u); pdestroy(v); | |
| return presult(u3); /* result always positive */ | |
| } |