Post Reply 
(HP-67/97) RATIONAL ARITHMETIC IN FLOATING-POINT by W. Kahan
05-02-2015, 05:39 PM (This post was last modified: 05-02-2015 05:41 PM by Thomas Klemm.)
Post: #1
(HP-67/97) RATIONAL ARITHMETIC IN FLOATING-POINT by W. Kahan
(02-04-2015 06:52 AM)Katie Wasserman Wrote:  A lot of this is fluff but not all, William Kahan has some papers on this site. For example this one on rational arithmetic in floating point. He gives programs for the 67/97 and the 71b and mentions the 15C and 41C.

Thanks for sharing the paper.

Cheers
Thomas

Usage:
Code:
        The stack holds four integers  X, Y, Z, T  construed as two rational numbers  Y/X  and  T/Z ,
        both presumed to be  in lowest terms (ilt).  If not,  pressing  [E]  will reduce  Y/X  to lowest
        terms while leaving  T/Z  unchanged.  The four rational operations are performed by pressing one of
        the keys  [A], [B], [C], [D]  to invoke reliable programs,  or  [a], [b], [c], [d]  to invoke obvious
        programs.  The reliable programs accept integers as large as  1,999,999,999  and deliver exactly
        correct results up to  8,000,000,000 . Specifically,  the programs ...

Add:         Press  [A]  or  [a]  to put  Y/X := (T/Z) + (Y/X)  ilt,  leaving  T/Z  unchanged.
Subtract:    Press  [B]  or  [b]  to put  Y/X := (T/Z) - (Y/X)  ilt,  leaving  T/Z  unchanged.
Multiply:    Press  [C]  or  [c]  to put  Y/X := (T/Z) * (Y/X)  ilt,  leaving  T/Z  unchanged.
Divide:      Press  [D]  or  [d]  to put  Y/X := (T/Z) / (Y/X)  ilt,  leaving  T/Z  unchanged.
Reduce:      Press  [E]  to put  Y/X := (Y/X)  ilt,  leaving  T/Z  unchanged.
GCD:         Press  [e]  to put  X := Greatest Common Divisor of  X and Y .
REM:         Press  [GSB] [8]  to put   X := Y - nX   and   n : = Integer nearest Y/X   into  reg. 8 .

        The programs use registers  0 to 8  and I,  and labels  2 to 8  too.

Example:

\(\frac{123,456,799}{123,456}-\frac{988,297,396}{988,291}=\frac{31}{189751872}\)

1234 56799.
[ENTER↑]
123456.
[ENTER↑]
9882 97396.
[ENTER↑]
988291.
\([\)B]
1897 51872.
[x<>y]
31.


Program:
Code:
LBL A
    CHS
LBL B
    GSB 7
    X<>Y
    R^
    STO 4
    GSB e
    X=0?
    EEX
    STO 5
    STO/ 0
    STO/ 4
    RCL 1
    X<>Y
    GSB 8
    RCL 4
    *
    STO 6
    RCL 3
    R^
    GSB 8
    RCL 0
    STO 7
    *
    RCL 6
    -
    GSB e
    STO/ 5
    RCL 1
    X<>Y
    GSB 8
    RCL 4
    STO* 0
    *
    STO 1
    RCL 8
    STO 6
    RCL 3
    R^
    GSB 8
    RCL 7
    *
    RCL 1
    -
    X<>Y
    /
    STO 1
    RCL 5
    STO* 0
    RCL 8
    STO 5
LBL 5
    RCL 6
    RCL 4
    *
    ENTER
    ENTER
    RCL 5
    RCL 7
    *
    *
    EEX
    1
    0
    X>Y?
        GTO 4
    RCL 6
    ABS
    RCL 4
    ABS
    X<=Y?
        GTO 3
    LASTX
    RCL 6
    STO 4
    X<>Y
    STO 6
LBL 3
    RCL 5
    ABS
    RCL 7
    ABS
    X<=Y?
        GTO 3
    LASTX
    RCL 5
    STO 7
    X<>Y
    STO 5
LBL 3
    RCL 7
    ABS
    RCL 4
    ABS
    X<=Y?
        GTO 3
    RCL 6
    RCL 7
    GSB 8
    STO 6
    RCL 4
    RCL 8
    *
    STO- 5
        GTO 5
LBL 3
    RCL 5
    RCL 4
    GSB 8
    STO 5
    RCL 7
    RCL 8
    *
    STO- 6
        GTO 5
LBL 4
    LASTX
    R^
    -
    STO+ 1
        GTO 6
LBL e
    3
    CHS
    STO I
    RDN
    X=0?
        GTO 2
    GSB 8
        GTO (i)
LBL 8
    STO 8
    X<>Y
    ENTER
    ENTER
    RCL 8
    /
    DSP 0
    RND
    STO 8
    R^
    *
    -
        RTN
LBL 2
    X<>Y
    ABS
        RTN
LBL 7
    STO 0
    RDN
    STO 1
    RDN
    STO 2
    RDN
    STO 3
        RTN
LBL E
    GSB 7
    RDN
    GSB e
    X=0?
        GTO 6
    STO/ 0
    STO/ 1
LBL 6
    RCL 3
    RCL 2
    RCL 1
    RCL 0
    X>0?
        RTN
    CHS
    X<>Y
    CHS
    X<>Y
        RTN
LBL D
    X<>Y
LBL C
    GSB 7
    STO 4
    GSB e
    X#0?
    STO/ 0
    X#0?
    STO/ 4
    RCL 1
    RCL 2
    GSB e
    X#0?
    STO/ 1
    RCL 2
    X<>Y
    X#0?
    /
    ST0* 0
    RCL 4
    STO* 1
        GTO 6
LBL a
    CHS
LBL b
    GSB 7
    *
    X<>Y
    R^
    STO* 0
    *
    -
    STO 1
    GSB 6
        GTO E
LBL d
    X<>Y
LBL c
    GSB 7
    STO* 1
    R^
    STO* 0
    GSB 6
        GTO E

Cards for Jacques Laporte's HP-67 Emulator:
Code:
 0 0 0 0 0 0 0
 3 0 0 0 2 2 2
 9 4 4 7 3 0 b
 7 f b 1 c f a
 7 1 8 4 8 0 9
 5 1 d 5 4 a e
 4 7 7 3 9 6 3
 9 7 4 b 8 3 0
 8 5 a e 3 8 3
 9 9 7 7 0 b 8
 9 1 3 9 e 0 7
 4 b 8 3 0 7 1
 3 9 7 7 b 8 4
 7 7 3 9 6 7 8
 e 0 7 5 9 1 1
 e 3 0 3 8 7 1
 1 b 3 9 7 4 7
 6 f 5 9 5 7 8
 1 1 1 d 3 9 3
 9 7 7 7 5 1 b
 2 6 7 4 2 6 7
 6 d 4 5 2 1 0
 9 6 3 0 9 4 7
 6 4 3 d 3 5 7
 d 3 5 7 2 6 7
 7 2 6 7 5 f 3
 7 7 f 3 9 5 3
 0 9 7 7 5 4 3
 7 7 7 6 d 3 5
 7 2 6 7 4 2 6
 d 5 a 5 3 9 7
 8 7 4 9 6 b 8
 7 8 7 7 9 5 b
 8 7 4 7 5 f 3
 2 5 2 1 f 0 c
Code:
 0 0 0 0 0 0 0
 4 0 0 0 2 2 2
 3 8 4 7 4 3 f
 4 d 5 a 6 3 9
 3 1 9 f 1 c 1
 3 e e d 6 c 1
 3 0 9 8 f 8 d
 f b 8 d 2 5 4
 9 8 2 e 6 0 1
 e 7 8 1 b 1 b
 2 6 3 0 f 2 0
 e 3 8 3 9 4 7
 9 2 3 1 9 1 3
 1 9 0 f 7 0 e
 a e 3 1 b 7 f
 e 0 e 9 3 3 1
 7 2 7 3 f 6 8
 1 8 0 d 6 5 4
 1 c 3 0 1 c 0
 e 5 5 7 0 7 1
 9 4 b 7 f c 3
 0 f d 0 e 3 0
 7 2 7 1 8 4 5
 3 8 0 5 3 a e
 1 e 5 3 3 0 7
 2 8 1 5 3 a e
 e b 1 c e a d
 6 e 1 7 4 e 0
 3 8 3 9 e 0 4
 7 3 0 3 9 b 7
 b 7 f c 3 0 e
 d d e b 6 9 1
 0 0 0 0 d e b
 6 e 0 4 7 e 1
 4 f e 4 2 8 c
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
(HP-67/97) RATIONAL ARITHMETIC IN FLOATING-POINT by W. Kahan - Thomas Klemm - 05-02-2015 05:39 PM



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