Long Division program
08-25-2017, 06:47 AM (This post was last modified: 08-25-2017 07:35 AM by Gamo.)
Post: #1
 Gamo Senior Member Posts: 700 Joined: Dec 2016
Long Division program
Got this nice Long Division program from HP Key Notes newsletter (1977 issue)

Anyone have the idea on how to adapt this program to work on HP 12C will be nice.

001 *LBL A
002 /
003 LSTX
004 X<>Y
005 ENT^ (ENTER)
006 FRC (FRAC)
007 X<>Y
008 INT (INTG)
009 R down
010 x
011 EEX
012 4
013 /
014 R up (no key)
015 +
016 DSP4 (FIX4)
017 RTN (no key)
018 R/S

To use the routine press ENTER key in divisor and press A

Example:

4359 ENTER, 57 A ------ 76.0027

Quotient = 76, Remainder = 27

Gamo
08-26-2017, 05:54 PM (This post was last modified: 08-26-2017 06:03 PM by Dieter.)
Post: #2
 Dieter Senior Member Posts: 2,397 Joined: Dec 2013
RE: Long Division program
(08-25-2017 06:47 AM)Gamo Wrote:  Anyone have the idea on how to adapt this program to work on HP 12C will be nice.

?!? – where's the problem, this HP67 program (I suppose) can be used almost 1:1 on the 12C. OK, the 12C has no labels, so remove the first line. And there is no roll up command, but that's the same as 3x roll down. Since there is no subroutine call the final RTN here works as a R/S, so simply ignore it.

So if you want to you can directly use this program on the 12C, just with these minor modifications.

Or consider this alternate solution:

Code:
01 ENTER 02 ENTER 03 CLX 04 x 05 + 06 / 07 LstX 08 x<>y 09 INTG 10 ENTER 11 R↓ 12 x 13 - 14 GTO 00

Hint: the first five lines fill T, Z and Y with the dividend while X holds the divisor.
More important: this procedure calculates the remainder without the FRAC function which is the preferred method since it does not cause roundoff errors.

4359 ENTER 57 [R/S] => 27 [x<>y] 76

Add a final [x<>y] if you want to have it the other way round.

Code:
14 EEX 15 4 16 / 17 + 18 FIX 4 19 GTO 00

....and the result is displayed as 76,0027.

Dieter
08-26-2017, 06:17 PM
Post: #3
 Gerson W. Barbosa Senior Member Posts: 1,419 Joined: Dec 2013
RE: Long Division program
(08-26-2017 05:54 PM)Dieter Wrote:  Or consider this alternate solution:

Code:
01 ENTER 02 ENTER 03 CLX 04 x 05 + 06 / 07 LstX 08 x<>y 09 INTG 10 ENTER 11 R↓ 12 x 13 - 14 GTO 00

Hint: the first five lines fill T, Z and Y with the dividend while X holds the divisor.
More important: this procedure calculates the remainder without the FRAC function which is the preferred method since it does not cause roundoff errors.

4359 ENTER 57 [R/S] => 27 [x<>y] 76

Add a final [x<>y] if you want to have it the other way round.

Code:
14 EEX 15 4 16 / 17 + 18 FIX 4 19 GTO 00

....and the result is displayed as 76,0027.

Same number of steps, but you always manage to cut a few off :-)

Code:
 01 f RND 02 Rv 03 ENTER 04 ENTER 05 g LSTx 06 / 07 g LSTx 08 x<>y 09 g INTG 10 ENTER  11 Rv 12 *  13 - 14 EEX 15 4 16 / 17 + 18 f 4 19 GTO 00

Gerson.
08-26-2017, 06:30 PM (This post was last modified: 08-27-2017 04:55 PM by Dieter.)
Post: #4
 Dieter Senior Member Posts: 2,397 Joined: Dec 2013
RE: Long Division program
(08-26-2017 06:17 PM)Gerson W. Barbosa Wrote:  Same number of steps, but you always manage to cut a few off :-)

Hmmm... that's another procedure for filling the stack in the desired way. But it also takes five steps.

Edit: one step can be saved. Replace the first five steps with these four:

Code:
01 ENTER 02 ENTER 03 - 04 +

If you want to minimize the step count it looks like you have to use a register:

Code:
01 x<>y 02 STO 0 03 x<>y 04 / 05 LstX 06 x<>y 07 INTG 08 x 09 STO-0 10 LstX 11 RCL 0 12 EEX 13 4 14 / 15 + 16 FIX 4 17 GTO 00

On the Woodstocks, Spices and similar devices a short and elegant method for storing X and Y simultaneously is  CLΣ Σ+. But as far as I can see a CLΣ on the 12C seems to clear the whole stack. Yuk!

Finally, as it has not been mentioned yet: if quotient and remainder are returned as qqqq,rrrr the divisor must not exceed 10 000.

Edit: Since the roundoff error of the FRAC method should not show up if the result is returned as qqqq,rrrr (this rounds away the last four digits of the calculated remainder) one could also do it this way:

Code:
01 ENTER 02 R↓ 03 / 04 INTG 05 LstX 06 FRAC 07 R↓ 08 R↓ 09 R↓ 10 x 11 EEX 12 4 13 / 14 + 15 FIX 4 16 GTO 00

That's three steps less than my original version. Or five steps less if there was a R↑ function to replace the three R↓. ;-)

Dieter
08-27-2017, 11:51 AM
Post: #5
 Gamo Senior Member Posts: 700 Joined: Dec 2016
RE: Long Division program
Thank You for difference variation steps on how to solve this Long Division program. Very helpful to learn from your guys to see many difference ways to adapt these program from other HP calculator ( my example of Long Division program was from HP-41C ) because of the lack of many advance keys funtions of the HP 12C this make it to think harder for other way to program it.

Gamo
08-27-2017, 12:17 PM (This post was last modified: 08-27-2017 12:43 PM by Dieter.)
Post: #6
 Dieter Senior Member Posts: 2,397 Joined: Dec 2013
RE: Long Division program
(08-27-2017 11:51 AM)Gamo Wrote:  Very helpful to learn from your guys to see many difference ways to adapt these program from other HP calculator ( my example of Long Division program was from HP-41C )

No, your example definitely was a program for the HP67/97. Only these calculators have a DSP command for setting the number of displayed digits independent from the display mode (FIX/SCI/ENG) and on the '41 "EEX 4" is a single line (1E4). The way the commands are written also resembles the output of an HP97 printer ("ENT↑", labels with asterisk, etc.). If all this still doesn't convice you: in 1977 there was no 41C yet – it was introduced in 1979. ;-)

BTW, in what 1977 Keynotes issue did you find this program?

Edit: I finally found it on page 6 of V3N2 – but that is May 1979, not 1977 !
And still two months before the 41C appeared.

Dieter
08-28-2017, 05:10 AM
Post: #7
 Gamo Senior Member Posts: 700 Joined: Dec 2016
RE: Long Division program
Was searching on newsletter and though that it was
41C You're right!!

Gamo
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)