*}
codea teams

Decimal To Fraction



This little program will use continued fractions to convert a floating point number to a fraction. If you want to learn more about continued fractions: http://en.wikipedia.org/wiki/Continued_fraction.

#include <stdio.h>
#include <stdlib.h>
#define EPS 0.0000001

void main(int argc, char *argv[])
{
    float a,b,what,num,den,ratio;
    int c,d,e,f,mult;

    if (argc ==1)
    {
        printf("provide a number\n");
        exit(1);
    }
    sscanf(argv[1],"%f",&what); 
    if (what<0.0)
    {
        printf("provide a positive number!\n");
        exit(1);
    }

    a=what;
    b=1.0;
    c=1;
    d=0;
    e=0;
    f=1;

    for(;;)
    {
        mult=a/b;
        a-=mult*b;
        c-=mult*d;
        e-=mult*f;
        num=-e;
        den=c;
        ratio=num/den;
        printf("%d/%d=%f\n",-e, c, ratio);
        if(what-ratio<EPS) break;

        mult=b/a;
        b-=mult*a;
        d-=mult*c;
        f-=mult*e;
        num=f;
        den=-d;
        ratio=num/den;
        printf("%d/%d=%f\n",f, -d, ratio);
        if(ratio-what<EPS) break;
    }
}   

The output of dec2fract 0.29 is:

0/1=0.000000
1/3=0.333333
2/7=0.285714
9/31=0.290323
20/69=0.289855
29/100=0.290000