Re: Continued fraction problem
- To: mathgroup at smc.vnet.net
- Subject: [mg17134] Re: Continued fraction problem
- From: Mark Sofroniou <marks>
- Date: Sat, 17 Apr 1999 03:35:21 -0400
- Organization: NETTuno
- References: <7f1dqc$kp6@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Alan W.Hopper wrote: > A quite artificial but nevertheless interesting construction > in recreational maths is the Champernowne Constant, defined > in Eric Weisstein's Concise Encyc. of Math., > as the decimal 0.1234567891011... , obtained by concatenating > the positive integers. > > The continued fraction expansion of this number is stated to > be ; (0,8,9,1,149083,1,1,1,4,1,1,1,3,4,1,1,1,15, a 166 digit #,..., > (position 41)a 2504 digit #,...,(position 163)a 33102 digit #,... > > ...text omitted... > > So I wonder if anyone knows a workable method of obtaining the correct > continued fraction period of a difficult case like the Champernowne const. > with Mathematica, say up to that enormous 163 rd term, if it is at all > feasible? > > Alan Hopper > awhopper at hermes.net.au Dear Alan. Thanks for this most interesting example. If you are prepared to wait for version 4.0 then this is reasonably straightforward (please don't ask me about release dates). First set up a function to make a floating point number from the first n digit blocks. This requires a bit of subtlety in order to efficiently generate a number with many digits. In[1]:= Champernowne[n_]:= Module[{cint, creal}, (* Make an integer to represent the digit sequence *) cint = ToExpression[ StringJoin[Table[ ToString[i],{i, n}] ] ]; (* Convert to an arbitrary precision floating point number and set the error *) creal = SetAccuracy[cint, 0]; (* Renormalise and extract the mantissa m, where 1 > m >= 1/10 *) First[ MantissaExponent[creal] ] ]; Next generate the floating point approximation concatenated from the first 17000 integers (this number was simply found experimentally). In[2]:= x = Champernowne[ 17000 ];//Timing Out[2]= {3.06 Second, Null} Next find the continued fraction, which is a kernel function in version 4.0. In[3]:= cf = ContinuedFraction[ x ];//Timing Out[3]= {1.96 Second, Null} The ContinuedFraction function will take care of error control for inexact numbers by only returning partial quotients that are justified by the precision of the input value - this was not the case in the NumberTheory package in version 3.0. This is the number of partial quotients that were generated. In[4]:= Length[cf] Out[4]= 355 This extracts the partial quotients of interest at specified positions. In[5]:= cf2 = Part[ cf, {19, 41, 163}]; This evaluates approximate numbers at the extracted positions, which seem to confirm the results that were expected. In[6]:= N[ cf2 ] 165 2503 33101 Out[6]= {4.5754 10 , 4.457353800911179 10 , 4.445733537800891 10 } Mark Sofroniou Wolfram Research Inc.