⍝ Continued Fractions:

    ⎕DCT DCT ← ⎕CT ⎕DCT                 ⍝ for decimal floating point

    cfract 5÷8                          ⍝ rational numbers have a finite CF.
0 1 1 1 2

    cfract 67÷29
2 3 4 2

    cfract¨ ¯4 to 4                     ⍝ whole numbers, including 0.
┌──┬──┬──┬──┬─┬─┬─┬─┬─┐
│¯4│¯3│¯2│¯1│0│1│2│3│4│
└──┴──┴──┴──┴─┴─┴─┴─┴─┘

    cfract *1                           ⍝ e has an infinite but regular CF.
2 1 2 1 1 4 1 1 6 1 1 8 1 1 10 1 1 12

    +∘÷/ cfract *1                      ⍝ reduction reconstitutes e.
2.718281828

    cfract ○1                           ⍝ irregular infinite CF for pi.
3 7 15 1 292 1 1 1 2 1 4

    cfract root 2                       ⍝ CF for sqrt(2).
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

    cfract 0.5×1+root 5                 ⍝ CF for golden ratio.
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2

    cfract ¯2.3                         ⍝ negative argument.
¯3 1 2 3

    rational +∘÷/¨ 1<⍳¨⍳10              ⍝ Fibonacci sequences.
0 1 1 2 3 5  8 13 21 34
1 1 2 3 5 8 13 21 34 55
                                        ⍝ Some regular CFs:
    cfract 0.5×3+root 13
3 3 3 3 3 3 3 3 3 3 3 3 3 3

    cfract (4+root 37)÷7
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2

    14↑cfract 3○1                       ⍝ tan(1)
1 1 1 3 1 5 1 7 1 9 1 11 1 13

:If ⎕FR=1287                            ⍝ successive rational approximations to Pi.
        rational +∘÷/¨ ,\ 0 cfract ○1
    3 22 333 355 103993 104348 208341 312689 833719 1146408 5419351
    1  7 106 113  33102  33215  66317  99532 265381  364913 1725033
:Else
        rational +∘÷/¨ ,\ 0 cfract ○1
    3 22 333 355 103993 104348 208341 312689 833719 1146408 4272943 5419351 5419351 5419351
    1  7 106 113  33102  33215  66317  99532 265381  364913 1360120 1725033 1725033 1725033
:EndIf

    seq ← {+∘÷/¨,\cfract ⍵}                 ⍝ successive reductions.
    err ← {10⍟|(⍵-⍺⍺ ⍵)÷⍵}                  ⍝ base 10 log error factor
    col ← {6 2⍕⍪⍵}                          ⍝ formatted column.

    vals ← (*1) (○1) (2*÷2) (0.5×1+5*÷2)    ⍝ exp, Pi, sqrt 2, phi.

:If ⎕FR=1287

    ⍕ col∘(seq err)¨ vals       ⍝ 10∘⍟ errors in successive approximations.
  ¯0.58   ¯1.35   ¯0.53   ¯0.42 
  ¯0.98   ¯3.40   ¯1.22   ¯0.63 
  ¯1.72   ¯4.58   ¯2.00   ¯1.14 
  ¯1.93   ¯7.07   ¯2.76   ¯1.52 
  ¯2.83   ¯9.74   ¯3.53   ¯1.95 
  ¯3.76   ¯9.98   ¯4.29   ¯2.37 
  ¯3.91  ¯10.41   ¯5.06   ¯2.79 
  ¯4.99  ¯11.03   ¯5.82   ¯3.20 
  ¯6.08  ¯11.56   ¯6.59   ¯3.62 
  ¯6.19  ¯12.29   ¯7.35   ¯4.04 
  ¯7.39  ¯14.15   ¯8.12   ¯4.46 
  ¯8.61           ¯8.89   ¯4.88 
  ¯8.69           ¯9.65   ¯5.29 
  ¯9.99          ¯10.42   ¯5.71 
 ¯11.30          ¯11.18   ¯6.13 
 ¯11.37          ¯11.95   ¯6.55 
 ¯12.75          ¯12.71   ¯6.97 
 ¯14.14          ¯13.48   ¯7.38 
                 ¯14.24   ¯7.80 
                          ¯8.22 
                          ¯8.64 
                          ¯9.05 
                          ¯9.47 
                          ¯9.89 
                         ¯10.31 
                         ¯10.73 
                         ¯11.14 
                         ¯11.56 
                         ¯11.98 
                         ¯12.40 
                         ¯12.82 
                         ¯13.23 
                         ¯14.07 
:Else
    ⍕ col∘(seq err)¨ vals       ⍝ 10∘⍟ errors in successive approximations.
  ¯0.58   ¯1.35   ¯0.53   ¯0.42 
  ¯0.98   ¯3.40   ¯1.22   ¯0.63 
  ¯1.72   ¯4.58   ¯2.00   ¯1.14 
  ¯1.93   ¯7.07   ¯2.76   ¯1.52 
  ¯2.83   ¯9.74   ¯3.53   ¯1.95 
  ¯3.76   ¯9.98   ¯4.29   ¯2.37 
  ¯3.91  ¯10.41   ¯5.06   ¯2.79 
  ¯4.99  ¯11.03   ¯5.82   ¯3.20 
  ¯6.08  ¯11.56   ¯6.59   ¯3.62 
  ¯6.19  ¯12.29   ¯7.35   ¯4.04 
  ¯7.39  ¯14.15   ¯8.12   ¯4.46 
  ¯8.61           ¯8.89   ¯4.88 
  ¯8.69           ¯9.65   ¯5.29 
  ¯9.99          ¯10.42   ¯5.71 
 ¯11.30          ¯11.18   ¯6.13 
 ¯11.37          ¯11.95   ¯6.55 
 ¯12.75          ¯12.71   ¯6.97 
 ¯14.13          ¯13.48   ¯7.38 
                 ¯14.24   ¯7.80 
                          ¯8.22 
                          ¯8.64 
                          ¯9.05 
                          ¯9.47 
                          ¯9.89 
                         ¯10.31 
                         ¯10.73 
                         ¯11.14 
                         ¯11.56 
                         ¯11.98 
                         ¯12.40 
                         ¯12.82 
                         ¯13.24 
                         ¯14.07 
:EndIf

    ×⍨∘{+∘÷/1 40/⍵}¨(⍳10)×⊂1 2          ⍝ (cf ⍵×1 2 2 ...)*2 ←→ 1+⍵*2.
2 5 10 17 26 37 50 65 82 101

    ×⍨∘{+∘÷/1 40/⍵}¨(⍳10)×⊂3 6          ⍝ (cf ⍵×3 6 6 ...)*2 ←→ 1+(3×⍵)*2.
10 37 82 145 226 325 442 577 730 901

    ⎕DCT ← DCT                          ⍝ restore DCT

Back to: code

Back to: Workspaces