Post Reply 
(12C) Modulus
07-18-2016, 10:12 PM
Post: #3
RE: (12C) Modulus
(07-15-2016 06:32 PM)Dieter Wrote:  
(07-15-2016 02:37 AM)Eddie W. Shore Wrote:  This program takes the modulus of two numbers:
Y MOD X = X * FRAC(Y/X)

That's not a good idea: roundoff errors will spoil the results.
Consider your two examples:

124 mod 77 does not return 47 but 46,99999997
3862 mod 108 does not return 82 but 82,00000008

That's why you better use the relation y mod x = y – x * INT(y/x) instead.

Code:
01-       34  x<>y
02-     44 0  STO 0
03-       34  x<>y
04-       10  ÷
05-    43 36  LSTX
06-       34  x<>y
07-    43 25  INTG
08-       20  x
09-  44 30 0  STO- 0
10-       33  R↓
11-     45 0  RCL 0
12- 44,33 00  GTO 00

That's a bit longer and requires one data register, but it works.
The R↓ in line 11 was included to preserve the initiial values in T and Z.

Dieter

Here's a routine I wrote about a month ago. One step longer, but it uses only the stack and Last-X register. I wrote it for the HP-38C, but the steps are exactly the same for the HP-12C (but the keycodes would be different). For the two examples given by Dieter, it gets the right results.

Code:
01-     x<>y
02-     Enter
03-     Enter
04-     R↓
05-     R↓
06-     R↓
07-     ÷
08-     LSTX
09-     x<>y
10-     INTG
11-     x
12-     -
13-     GTO 00


Regards,
Bob
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
(12C) Modulus - Eddie W. Shore - 07-15-2016, 02:37 AM
RE: (12C) Modulus - Dieter - 07-15-2016, 06:32 PM
RE: (12C) Modulus - bshoring - 07-18-2016 10:12 PM
RE: (12C) Modulus - RobertM - 07-21-2016, 11:36 PM
RE: (12C) Modulus - Dieter - 07-25-2016, 09:17 AM
RE: (12C) Modulus - Dieter - 07-25-2016, 09:46 AM
RE: (12C) Modulus - bshoring - 07-28-2016, 11:01 PM
RE: (12C) Modulus - Dieter - 07-29-2016, 05:39 PM



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