blob: a72a8a75c140ef4ae7d4720b8faa415b5930f1a0 [file] [log] [blame]
#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 */
}