HP Forums
Decimal to Fraction Function - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: Decimal to Fraction Function (/thread-2024.html)



Decimal to Fraction Function - Namir - 08-27-2014 06:18 PM

The following function takes the following parameters:

1) x - the fraction to be converted.
2) n - the number of continued fraction terms.
3) toler - the residual tolerance (to prevent divisions by small numbers).

The function returns the following values:

1) The approximation for x.
2) The numerator.
4) The denominator. The approximation for x = numerator / denominator.
4) The difference between x and its approximated value.

Here is the HP Prime listing:

Code:

EXPORT Dec2Frac(x,n,toler)
BEGIN
  LOCAL i,numer,denom,aux,resid,y,m,x0;
  
  x0:=x;
  y:=MAKEMAT(0,n,1);
  // Build continued fraction coefficients
  m:=0;
  FOR i FROM 1 TO n DO
    m:=m+1;
    y(i,1):=IP(x);
    resid:=FP(x);
    IF ABS(resid)<toler THEN
      BREAK;
    END;
    x:=1/resid;
  END;
  
  // unfold the fractions
  numer:=y(m,1);
  denom:=1;
  FOR i FROM m-1 DOWNTO 1 DO
    aux:=numer;
    numer:=y(i,1)*numer+denom;
    denom:=aux;
  END;
  resid:=x0-numer/denom;
  RETURN {numer/denom,numer,denom,resid};
END;

Here is an example:

Code:
Dec2Frac(pi,4,0.0001)
    {3.14159292035,355,113,0.00000026676}

Enjoy!

Namir

PS: Many many thanks for Joe Horn who patently pointed out the many errors in the code. I feel a bit ashamed, because I should have done a much better job posting these simple programs. My former Jesuit teachers would have commented that I "did a sloppy job!". Thanks Joe!!