04-22-2014, 09:09 AM
Hello friends,
for educational purpose I used the hp 50g to approximate a root with a continued fraction.
The main task of such a program is 1) to calculate integer part of the root,
2) the reciprocal of the non-integer part
3) find out the integer part of the expression in 2)
2) and 3) is repeated as long as you whish.
I made three programs:
anrat: splits every fraction in three parts: integer part, enumarator and denominator.
anirr: with the help of "anrat" this program calculates one step 2) and 3)
rooeu: the main program acts with "anirr", it calculates 1) and the repeated times of 2) and 3), last task is to display the continued fraction in the depth you wished, display the reduced fraction and the numerical value of the continued fraction.
Enjoy!
anrat:
Input: fraction or integer
Output: integer (level 3)
denumerator (level 2)
denominator (level 1)
anirr:
Input: root which has to be estimated (level 3)
integer part of the root (level 2)
the reciprocal value of (level 1)
irrational rest of the root
smaller 1
Output: root which has to be estimated (level 4)
integer part of the root (level 3)
the new reciprocal value of (level 2)
irrational rest of the root,
smaller 1
integer for continued fraction (level 1)
rooeu:
Input: root to estimate (level 2)
depth of continued fraction (level 1)
Output: numerical value of continued fraction (level 1)
and some display screen shots:
pic1: in- (level 4) and output from anrat
pic2, 3 in- and output from anirr (here root from 52)
pic4 input for rooeu (here root from 52 and iteration depth 6)
pic5 first output: continued fraction
pic6: second output reduced fraction
pic7: numerical value
[attachment=552][attachment=553][attachment=554][attachment=555]
for educational purpose I used the hp 50g to approximate a root with a continued fraction.
The main task of such a program is 1) to calculate integer part of the root,
2) the reciprocal of the non-integer part
3) find out the integer part of the expression in 2)
2) and 3) is repeated as long as you whish.
I made three programs:
anrat: splits every fraction in three parts: integer part, enumarator and denominator.
anirr: with the help of "anrat" this program calculates one step 2) and 3)
rooeu: the main program acts with "anirr", it calculates 1) and the repeated times of 2) and 3), last task is to display the continued fraction in the depth you wished, display the reduced fraction and the numerical value of the continued fraction.
Enjoy!
anrat:
Input: fraction or integer
Output: integer (level 3)
denumerator (level 2)
denominator (level 1)
Code:
%%HP: T(3)A(R)F(,);
\<< DUP
IF TYPE 9, == @@it's a fraction?
THEN
DUP
IF 1 > @@when yes, it a improper fraction
THEN
PROPFRAC OBJ\-> DROP2 @@when yes, then change fraction in integer (level 2)
@@and rest fraction (level 1)
ELSE
0 SWAP @@when no improper fraction, set integer to zero
END
OBJ\-> DROP2 @@split fraction into enumerator and denominator
ELSE
0 0 @@if no fraction: level 1 and 2 is set to zero
END
\>>
anirr:
Input: root which has to be estimated (level 3)
integer part of the root (level 2)
the reciprocal value of (level 1)
irrational rest of the root
smaller 1
Output: root which has to be estimated (level 4)
integer part of the root (level 3)
the new reciprocal value of (level 2)
irrational rest of the root,
smaller 1
integer for continued fraction (level 1)
Code:
%%HP: T(3)A(R)F(,);
\<< 0 DUPDUP \-> VAL GVAL RVAL G R N
\<< RVAL FDISTRIB OBJ\-> DROP2 SWAP @@split reciprocal in an irrational and a rational part
@@swap is necessary because the rational part is on level 2
ANRAT DUP @@duplicate the last output from anrat
@@the denominator of the fraction
IF 0 \=/
THEN
/ 'R' STO @@that builds the fraction together
@but only the proper part of it
ELSE
DROP2 @@clean up the stack, if there is only
END @@an integer
'G' STO @@Store the integer part for the continued fraction
VAL SWAP / EVAL @@Divide the search root value with the irrational part
'N' STO GVAL N / @@that is necessary because hp 50g reduce fractions
@@automatically, with this denominator the integer part
@@of the root is divided
ANRAT DUP @@this fraction is analysed in respect
@@to its integer part
IF 0 \=/
THEN
/ 'R' STO+ @@add the proper fraction to the former fraction rest
ELSE
DROP2 @@clean up the stack, if there is only
END @@an integer
'G' STO+ @@add the integer part for the continued fraction
R EVAL @@New remainder is analysized for integer part
ANRAT DUP
IF 0 \=/
THEN
/ @@if new remainder is a proper fraction then take it
@@as a new rational rest for the next stage calculating
@@the reciprocal remainder of the searched root
ELSE
DROP2 0 @@if there are three zeros add zero it to the integer part for
@@the continued fraction (it is not necessary)
END
'R' STO
'G' STO+
VAL GVAL DUP2 - N / R + INV @@Calculate the newreciprocal value of
EVAL @@irrational rest of the root, smaller 1
G
\>>
\>>
rooeu:
Input: root to estimate (level 2)
depth of continued fraction (level 1)
Output: numerical value of continued fraction (level 1)
Code:
%%HP: T(3)A(R)F(,);
\<< \-> V ANZ
\<< V \->NUM IP \->Q DUP 1, \->LIST \-> GZ ELST @@Calculate and
@@load first integer value into result list
\<< V GZ DUP2 - INV EVAL @@calculate first reciprocal value
@@of the non integer remainder of root
1, ANZ @@loop for calculating the integers for the
START @@integers used in the continued fraction
ANIRR 'ELST' STO+
NEXT
3, DROPN @@clean up the stack levels
0 @@first value in continued fraction
1, ANZ @@loop for building up the
START @@the continued fraction
ELST HEAD + INV @@generate next level of fraction
ELST TAIL @@reduce list with numbers and store it
'ELST' STO
NEXT
ELST HEAD + @@add last value without fraction
HALT @@display continued fraction
EVAL
HALT @@display reduced fraction
\->NUM @@display numerical value
\>>
\>>
\>>
and some display screen shots:
pic1: in- (level 4) and output from anrat
pic2, 3 in- and output from anirr (here root from 52)
pic4 input for rooeu (here root from 52 and iteration depth 6)
pic5 first output: continued fraction
pic6: second output reduced fraction
pic7: numerical value
[attachment=552][attachment=553][attachment=554][attachment=555]