efinley%ug.utah.edu@cs.utah.edu (Elliott Finley) (03/15/90)
When I tried using the built in '->Qpi' function of the hp48sx, I was a little disappointed. For a simple example of what I mean, try entering '1/3*pi', change it to a number, then execute '->Qpi'. It gives you a big fraction that is supposed to be a "best guess". Here are three programs that I use that will correctly factor pi out of a fraction. They'll also work on a 28 with one change (see below). Most of the code in the R-QC program was taken from an article that appeared on the net a while back, I can't remember who posted it so I can't give credit where credit is due. (Thanks, whoever it was) %%HP: T(3)A(D)F(.); @ R->Q (this works the same as the built in '->Q')@ \<< EVAL \->NUM R\->QC \-> RN RD \<< "'" RN ABS \->STR + "/" + RD \->STR + "'" + OBJ\-> RN SIGN * \>> \>> %%HP: T(3)A(D)F(.); @ R->QP (this is the replacement for the built in '->Qpi')@ \<< EVAL \->NUM DUP \pi \->NUM / \-> R P \<< R R\->QC P R\->QC \-> RN RD PN PD \<< IF PD RD < THEN PN \pi * PD / ELSE "'" RN ABS \->STR + "/" + RD \->STR + "'" + OBJ\-> RN SIGN * END \>> \>> \>> To use the above program on a 28 just change the OBJ-> to STR-> %%HP: T(3)A(D)F(.); @ R->QC (this program is called from the other two)@ \<< .000000000005 1 0 \-> X P A B \<< X WHILE 'ABS(FLOOR(X*A+.5)-X*A)\>=P*A' EVAL REPEAT INV DUP IP ABS A * B + A 'B' STO 'A' STO FP END DROP 'FLOOR(X*A+.5)' EVAL A \>> \>> Elliot