Here is another of those algorithms that are of limited use, but I want to keep in my back pocket. In this case, I had to deal with fractions when resizing recipes: a recipe that serves 5 requires 3/8 cups of olive oil – how much oil is needed if we are feeding 72? Just multiplying it out (3/8 / 5) * 72) does not yield a very user-friendly answer ( 216 / 40).
So, to reduce a fraction to it’s simplest terms, use the following:
where
n = numerator
d = denominator
double a;
double b = n;
double c = d;
while c != 0
{
a = b;
b = c;
c = a mod b;
}
n /= b; // or w = floor(n / d); n = mod(n, d) / b;
d /= b;
Feed this n = 3 * 72 / 5 and d = 8 (or 216 and 40) and you will get n = 27, d = 5 (or w=5, n=2, d=5) – which is far better.
This method also works for converting decimals to fractions; just use your decimal as the numerator and 1 as the denominator (e.g. n=2.6, d=1 yields n=13, d=5).
One thought on “Numbers to fractions, or reducing fractions”