Numbers to fractions, or reducing fractions


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).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s