Continued fraction: Difference between revisions

Content added Content deleted
m (→‎version 1: re-wrote part of the program to properly align the index part of the output.)
(Added COBOL)
Line 564: Line 564:
3.141592653589793
3.141592653589793
</pre>
</pre>

=={{header|COBOL}}==
{{works with|GnuCOBOL}}
'''Warning:''' the ''depth'' argument in the continued-fractions function relies on a quirk in GnuCOBOL 2.0 pre-release. Literals are passed as character fields. That behaviour is likely to change.

<lang COBOL> identification division.
program-id. show-continued-fractions.

environment division.
configuration section.
repository.
function continued-fractions
function all intrinsic.

procedure division.
fractions-main.

display "Square root 2 approximately : "
continued-fractions("sqrt-2-alpha", "sqrt-2-beta", 100)
display "Napier constant approximately : "
continued-fractions("napier-alpha", "napier-beta", 40)
display "Pi approximately : "
continued-fractions("pi-alpha", "pi-beta", 10000)

goback.
end program show-continued-fractions.

*> **************************************************************
identification division.
function-id. continued-fractions.
data division.
working-storage section.
01 alpha-function usage program-pointer.
01 beta-function usage program-pointer.
01 alpha usage float-long.
01 beta usage float-long.
01 running usage float-long.
01 iterations usage binary-long.
01 i usage binary-long.

linkage section.
01 alpha-name pic x any length.
01 beta-name pic x any length.
01 depth pic x any length.
01 approximation usage float-long.

procedure division using
alpha-name beta-name depth
returning approximation.

move depth to iterations
set alpha-function to entry alpha-name
if alpha-function = null then
display "error: no " alpha-name " function" upon syserr
goback
end-if
set beta-function to entry beta-name
if beta-function = null then
display "error: no " beta-name " function" upon syserr
goback
end-if

move 0 to alpha beta running
perform varying i from iterations by -1 until i = 0
call alpha-function using i returning alpha
call beta-function using i returning beta
compute running = beta / (alpha + running)
end-perform
call alpha-function using 0 returning alpha
compute approximation = alpha + running

goback.
end function continued-fractions.

*> ******************************
identification division.
program-id. sqrt-2-alpha.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
if iteration equal 0 then
move 1.0 to result
else
move 2.0 to result
end-if

goback.
end program sqrt-2-alpha.

*> ******************************
identification division.
program-id. sqrt-2-beta.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
move 1.0 to result

goback.
end program sqrt-2-beta.

*> ******************************
identification division.
program-id. napier-alpha.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
if iteration equal 0 then
move 2.0 to result
else
move iteration to result
end-if

goback.
end program napier-alpha.

*> ******************************
identification division.
program-id. napier-beta.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
if iteration = 1 then
move 1.0 to result
else
compute result = iteration - 1.0
end-if

goback.
end program napier-beta.

*> ******************************
identification division.
program-id. pi-alpha.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
if iteration equal 0 then
move 3.0 to result
else
move 6.0 to result
end-if

goback.
end program pi-alpha.

*> ******************************
identification division.
program-id. pi-beta.

data division.
working-storage section.
01 result usage float-long.

linkage section.
01 iteration usage binary-long unsigned.

procedure division using iteration returning result.
compute result = (2 * iteration - 1) ** 2

goback.
end program pi-beta.
</lang>

{{out}}
<pre>prompt$ cobc -xj continued-fractions.cob
Square root 2 approximately : 1.414213562373095
Napier constant approximately : 2.718281828459045
Pi approximately : 3.141592653589543</pre>


=={{header|CoffeeScript}}==
=={{header|CoffeeScript}}==