These are 2 functions from the phrase page on the wiki for dealing with continued fractions.
cf=:]`(<. , $:@%@(1&|))@.(~: <.) ecf=: (+%)/ First, if you don't call cf with an x: before its argument, J601beta will shutdown on error (I dont know what the error is) The main problem, cf x: %: 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 45 2 1 2 11 1 3 6 cf x:!.0 %: 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 1 4 2 5 9 3 3 1 11 57 2 The real answer for %: 2 is 1 2, and the most rational expectation of how the above functions would behave is to give us 1 2 2 2 2 2 2 2 for as long as its precision allows. Deep frustration and hard to track bugs occur because of the "random" divergence from the accurate solution that occurs even with x!.0. You need mathworld pages, or modelling the problem in another language to find these errors! One application for deep precision is to solve Pell Equations x^2-Dy^2 = 1 cf (x:!.0) %: 61 7 1 4 3 1 2 2 1 3 4 1 14 1 4 3 1 2 2 1 4 3 2 1 3 2 2 2 1 1 2 1 3 3 3 1 1 2 2 gives only 2 extra digits of precision over: cf (x:) %: 61 7 1 4 3 1 2 2 1 3 4 1 14 1 4 3 1 1 3 1 115 20 10 1 3 3 realcf 61 7 1 4 3 1 2 2 1 3 4 1 14 Even though the cf string produced by cf (x:!.0) %: 61 is long enough to solve the Pell Equation for D= 61, the fact that only its first 18 digits are accurate means that expanding it through ecf\ cf x:!.0 %:61 fails to find the Pell solution. I will recap the levels of frustration involved: * Consuming a function good enough to be published on J's site requires a thorough understanding of its potential failings for high input values. Makes consuming functions you don't understand dangerous. * The strategy of fixing code by randomly sprinkling x:!.0 everywhere doesn't work because even then, you're only slightly postponing the point where solutions go into random expansion. * There is no global switch to turn off random padding of numbers so programs give incorrect results instead of an error. You need to have a source for the right solutions, to tell that high input values give incorrect results. I would appreciate a global switch that would make the following results for the cf verb. cf x: %: 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 cf x:!.0 %: 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
