[Jprogramming] Algorithm to represent floating pointnumbersasfractions

Ricardo Forno ricardoforno at tutopia.com
Fri Feb 8 05:18:36 HKT 2008


----- Original Message ----- 
From: "Devon McCormick" <devonmcc at gmail.com>
To: "Programming forum" <programming at jsoftware.com>
Sent: Thursday, February 07, 2008 6:26 PM
Subject: Re: [Jprogramming] Algorithm to represent floating 
pointnumbersasfractions


> Interestingly, the English entry for this (continued fractions) on 
> Wikipedia
> (http://en.wikipedia.org/wiki/Continued_fractions) mentions "The 
> denominator
> is usually a power of two on modern computers, and a power of ten on
> electronic calculators, so a variant of Euclid's GCD algorithm can be used
> to give exact results."  (referring to
> http://en.wikipedia.org/wiki/Euclidean_algorithm)
>
> This ties in with Roger's use of GCD in his solution.  The explicit
> algorithm these pages give for computing continued
> fractions looks potentially expensive as it relies on repeated inversion. 
> I
> would think Roger's J version would be simpler to code in C if you have a
> GCD routine already.
>
> Playing around with continued fractions, I noticed a few interesting 
> things.
> First of all, I defined
>
>   contfrac=: 13 : '(+`%)/1,44$y'"1   NB. Arbitrary 44 as this seems to 
> give
> about 16 digits precision
>
> but it displays as
>
> ([: (+`%`:3) 1 , 44 $ ])"1
>
> Why is my "/" replaced by "`:3"?  It seems to work as expected.
>
> Anyway, trying this for a few sets of values revealed that very simple
> inputs give interesting results:
>
>   contfrac 1 1
> 1.618034           NB. Phi (the golden ratio)
>   contfrac 1 2
> 1.4142136         NB. %:2
>   contfrac 2 2
> 1.7320508         NB. %:3
>

Yes, I have programmed long ago a GCD routine for C. It uses Euclid's 
algorithm, but it is limited to integer values.
Anyway, from the point of view of efficiency, take into consideration that a 
GCD routine needs also repeated division or modulus operations.
Best regards.



More information about the Programming mailing list