Prompted by Eddie W Shore's
http://www.hpmuseum.org/forum/thread-6528.html
here's my short GCD programme.
The prog takes X & Y values from stack & returns GCD , or GCF if you wish, to stack level X.
Code:
0. { 16-Byte Prgm }
1. LBL “GCF”
2. LBL 00
3. MOD
4. LASTX
5. X<>Y
6. X≠0?
7. GTO 00
8. R↓
9. ABS
10. END
Same as mine, except I have a "+" in step 8 (since you know X contains zero).
I also add Smallest Common Multiple:
*LBL "SCM"
RCL ST Y
RCL ST Y
XEQ 00
/
x
RTN
Cheers, Werner
Is this ABS necessary?
Günter
Yes, ABS is needed for some negative inputs, otherwise the GCD is returned as a negative which is surely not the GREATEST common factor.
(07-10-2016 07:21 AM)Werner Wrote: [ -> ]Same as mine, except I have a "+" in step 8 (since you know X contains zero).
I also add Smallest Common Multiple:
*LBL "SCM"
RCL ST Y
RCL ST Y
XEQ 00
/
x
RTN
Cheers, Werner
What does XEQ 00 do?
Look at your own code ;-)
it does GCF, I keep them both in 1 program.
Werner
(07-10-2016 04:41 AM)Gerald H Wrote: [ -> ]here's my short GCD programme.
Fine – my fractions programs used virtually the same code, but with a final + instead of R↓ which works as a DROP here. ;-)
FTR, here is an alternate GCD routine with a slightly shorter and thus faster loop. It can be used if Z does not have to be preserved:
Code:
01 LBL 00
02 STO Z
03 MOD
04 X≠0?
05 GTO 00
06 +
07 END
And finally a solution that returns both LCM and GCD (in Y resp. X):
Code:
01 LBL"LCMGCD"
02 STO T
03 X<>Y
04 ST* T
05 LBL 00
06 STO Z
07 MOD
08 X≠0?
09 GTO 00
10 +
11 ST/ Y
12 END
This is HP41 code. HP42s users may imagine an additional "ST" in the stack related commands. ;-)
Dieter
(07-11-2016 06:58 PM)Dieter Wrote: [ -> ] (07-10-2016 04:41 AM)Gerald H Wrote: [ -> ]here's my short GCD programme.
Fine – my fractions programs used virtually the same code, but with a final + instead of R↓ which works as a DROP here. ;-)
FTR, here is an alternate GCD routine with a slightly shorter and thus faster loop. It can be used if Z does not have to be preserved:
Code:
01 LBL 00
02 STO Z
03 MOD
04 X≠0?
05 GTO 00
06 +
07 END
And finally a solution that returns both LCM and GCD (in Y resp. X):
Code:
01 LBL"LCMGCD"
02 STO T
03 X<>Y
04 ST* T
05 LBL 00
06 STO Z
07 MOD
08 X≠0?
09 GTO 00
10 +
11 ST/ Y
12 END
This is HP41 code. HP42s users may imagine an additional "ST" in the stack related commands. ;-)
Dieter
I tried the first programme but for various inputs it returned 1.
Sorry, my error, I entered STO "Z" for STO ST Z.
Now functions correctly.