#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 */ }