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