# HP Forums

Full Version: A very long HP-17BII equation - Update
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
After replacing the batteries of my HP-17BII I entered the equation in message #22 of the original thread (not a single error in the first try, just to show this is possible :-). Then I checked the functions for arguments close to 1 and near zero and noticed a significant loss of accuracy for certain arguments. For example:

sin(0.0000010) 1.7455(0850398)E-8
tan(0.0000010) 1.745(50000000)E-8
asin(0.000001) 5.7295(8368089)E-5
acos(0.999999) 8.1028474(8648)E-2
atan(0.000001) 5.7295(8368089)E-5

This update fixes that:

sin(0.0000010) 1.74532925199E-8
tan(0.0000010) 1.74532925199E-8
asin(0.000001) 5.72957795131E-5
acos(0.999999) 8.1028475206(4)E-2
atan(0.000001) 5.72957795131E-5

Also, COS is now slightly more accurate for small arguments and the forensic result is better:

Keystrokes Display corresponding
HP-42S results

9 DSP ALL X X=9
SIN SIN=1.56434465039E-1 0.15643446504
STO X COS COS=9.99996272738E-1 9.99996272743E-1
STO X TAN TAN=1.74549998553E-2 1.74549998555E-2
STO X MORE ATAN ATAN=9.99996272738E-1 9.99996272744E-1
MORE STO X MORE ACOS ACOS=1.56434567554E-1 1.56434441642E-1
MORE STO X MORE ASIN ASIN=9.00000594679 8.99999864267

Fortunately the HP-17BII solver has the LNP1(x)and EXPM(x) functions, which have allowed for this easy fix:

Code:
``` IF(S(SIN):(-1)^INT(X/180+0*L(X:MOD(X:180)*PI/180))*(2*SIGMA(K :1:21:4:X^K/FACT(K))-(EXPM1(X)-EXPM1(-X))/2)-SIN:IF(S(COS): COS-(-1)^INT(X/180+0*L(X:MOD(X:180)*PI/180))*(2*SIGMA(K:4:20: 4:X^K/FACT(K))+1-(EXPM1(X)+EXPM1(-X))/2):IF(S(TAN):TAN-(0*L(X :MOD(X:180)*PI/180)+4*SIGMA(K:1:21:4:X^K/FACT(K))-EXPM1(X)+ EXPM1(-X))/(4*SIGMA(K:4:20:4:X^K/FACT(K))+2-EXPM1(X)-EXPM1(-X )):IF(S(DEG):X*180/PI-DEG:IF(S(RAD):X*PI/180-RAD:IF(S(ASIN): ASIN-(0*(L(B:SGN(X)+IP(X))+L(X:ABS(X))+L(X:IF(X<>1:X/SQRT(1- SQ(X)):X))+L(X:IF(X<1:L(A:1)*X+L(Q:0):0*(L(Q:PI)+L(A:-1))+INV (X)))+L(X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/(X+1):X+L(V:0))))+ (G(Q)+G(A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X/(1-X))+G(V)))*G( B)*90/PI):IF(S(ACOS):ACOS-(0*(L(X:IF(X<>-1:SQRT((1-X)/(1+X)): X))+L(B:SGN(X))+L(X:ABS(X))+L(X:IF(X<1:L(A:1)*X+L(Q:0):0*(L(Q :PI)*L(A:-1))+INV(X)))+L(X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/( X+1):X+L(V:0))))+(G(Q)+G(A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X /(1-X))+G(V)))*(3-G(B))*90/PI):ATAN-(0*(L(B:SGN(X))+L(X:ABS(X ))+L(X:IF(X<1:L(A:1)*X+L(Q:0):0*(L(Q:PI)+L(A:-1))+INV(X)))+L( X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/(X+1):X+L(V:0))))+(G(Q)+G( A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X/(1-X))+G(V)))*G(B)*90/PI ))))))))```

This takes almost one minute to verify, but once it has been verified all trigonometric and other mathematical functions can be executed without leaving the solver (if the MATH menu is invoked, EXIT will return to the solver and the already verified equation).

The equation can be more easily entered into the HP-17BII by entering the following small equation first and then replacing each underlined X with its respective equation:

IF(S(SIN):X-SIN:IF(S(COS):COS-X:IF(S(TAN):TAN-X:IF(S(DEG):X*180/PI-DEG:IF(S

sine:

Code:
```    (-1)^INT(X/180+0*L(X:MOD(X:180)*PI/180))*(2*SIGMA    (K:1:21:4:X^K/FACT(K))-(EXPM1(X)-EXPM1(-X))/2)```

cosine:

Code:
```    (-1)^INT(X/180+0*L(X:MOD(X:180)*PI/180))*(2*SIGMA    (K:4:20:4:X^K/FACT(K))+1-(EXPM1(X)+EXPM1(-X))/2)```

tangent:

Code:
```    (0*L(X:MOD(X:180)*PI/180)+4*SIGMA(K:1:21:4:X^K/FACT(K))-EXPM1(X)    +EXPM1(-X))/(4*SIGMA(K:4:20:4:X^K/FACT(K))+2-EXPM1(X)-EXPM1(-X))```

arcsine:

Code:
```    0*(L(B:SGN(X)+IP(X))+L(X:ABS(X))+L(X:IF(X<>1:X/SQRT(1-SQ(X)):X))+L(X:IF(X<1:L(A:1)    *X+L(Q:0):0*(L(Q:PI)+L(A:-1))+INV(X)))+L(X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/(X+1):    X+L(V:0))))+(G(Q)+G(A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X/(1-X))+G(V)))*G(B)*90/PI```

arccosine:

Code:
```    0*(L(X:IF(X<>-1:SQRT((1-X)/(1+X)):X))+L(B:SGN(X))+L(X:ABS(X))+L(X:IF(X<1:L(A:1)*X+    L(Q:0):0*(L(Q:PI)*L(A:-1))+INV(X)))+L(X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/(X+1):X+L    (V:0))))+(G(Q)+G(A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X/(1-X))+G(V)))*(3-G(B))*90/PI```

arctangent:

Code:
```    0*(L(B:SGN(X))+L(X:ABS(X))+L(X:IF(X<1:L(A:1)*X+L(Q:0):0*(L(Q:PI)+L(A:    -1))+INV(X)))+L(X:IF(X>SQRT(2)-1:0*L(V:PI/2)+(X-1)/(X+1):X+L(V:0))))+    (G(Q)+G(A)*(4*SIGMA(K:1:29:4:X^K/K)-LNP1(2*X/(1-X))+G(V)))*G(B)*90/PI```

Running times:

SIN: 2.0 s
COS: 1.8 s
TAN: 2.8 s
DEG: 2.3 s
ASIN: 5.3 s
ACOS: 8.2 s
ATAN: 11.0 s

Ranges:
SIN, COS, TAN: -999 999 999 999 to 999 999 999 999 (1)
ASIN & ACOS: -1 to 1
ATAN: 1E-11 < |X| <= 9.99999999999E-499 (2)
(1) For odd multiples of 90 degrees, TAN returns 249999999996, which should be regarded as infinity
(2) Exponents equal or greater than 18 will cause UNDERFLOW, but the results will be correct (either -90 or +90 degrees)

Some usage examples:

3 X X=3
DEG DEG=171.887338539 ; 3 rad = 171.887338539°
STO X TAN TAN=-1.42546543094E-1 ; tan(3 rad) = -1.42546543094E-1
123456789 X COS COS=-9.87688340595E-1 ; cos(123456789) = -9.87688340595E-1
777777777717 +/- X SIN SIN=5.2335956243E-2 ; sin(-777777777717°) = 5.2335956243E-2
0.5 X MORE ACOS 60.0000000002 ; acos(0.5) = 60.0000000002°
shift MATH 3 LN 1.09861228867
2 +/- / EXP EXIT 5.77350269189E-1
MORE STO X MORE ATAN ATAN=30.0000000001 ; atan(exp(-ln(3)/2)) = 30.0000000001°

The above equation has been tested on the HP-200LX. On the HP-17BII, replace SIGMA with the Greek letter, as in the picture: P.S.: I forgot to mention that this equation is no so long as the equation in the original thread. Now it's "only" 1133-character long, 50 characters shorter than the older equation. Unlike then, I haven't experienced any "INSUFFICIENT MEMORY" message.

The following old threads give a clue about the formulas I used:

Mardi Gras Basic Trigs (HP-12C)

Easter Sunday Basic Trigs (HP-12C)

Formatting has been lost in the tables. I have yet to find out how to fix that.
That's as impressive as it is horrifying. I think I'd reach for my Pickett before resorting to keying that in and spending an hour looking for the one character I mistyped. (12-15-2014 05:48 PM)Gerson W. Barbosa pid='23033' dateline='1418665718' Wrote: [ -> ]Formatting has been lost in the tables. I have yet to find out how to fix that.

Here's my attempt to fix this:

For example:

sin(0.0000010)   1.7455(0850398)E-8
tan(0.0000010)   1.745(50000000)E-8
asin(0.000001)   5.7295(8368089)E-5
acos(0.999999)   8.1028474(8648)E-2
atan(0.000001)   5.7295(8368089)E-5

This update fixes that:

sin(0.0000010)   1.74532925199E-8
tan(0.0000010)   1.74532925199E-8
asin(0.000001)   5.72957795131E-5
acos(0.999999)   8.1028475206(4)E-2
atan(0.000001)   5.72957795131E-5

Also, COS is now slightly more accurate for small arguments and the forensic result is better:

Keystrokes              Display                 corresponding
HP-42S results

9 DSP ALL X             X=9
SIN                     SIN=1.56434465039E-1    0.15643446504
STO X COS               COS=9.99996272738E-1    9.99996272743E-1
STO X TAN               TAN=1.74549998553E-2    1.74549998555E-2
STO X MORE ATAN         ATAN=9.99996272738E-1   9.99996272744E-1
MORE STO X MORE ACOS    ACOS=1.56434567554E-1   1.56434441642E-1
MORE STO X MORE ASIN    ASIN=9.00000594679      8.99999864267

(…)

Running times:

SIN:  2.0 s
COS:  1.8 s
TAN:  2.8 s
DEG:  2.3 s
ASIN:  5.3 s
ACOS:  8.2 s
ATAN: 11.0 s

Ranges:

SIN, COS, TAN: -999 999 999 999 to 999 999 999 999  (1)
ASIN & ACOS: -1 to 1
ATAN: 1E-11 < |X| <=  9.99999999999E-499   (2)

(1) For odd multiples of 90 degrees, TAN returns 249999999996, which should be regarded as infinity
(2) Exponents equal or greater than 18 will cause UNDERFLOW, but the results will be correct (either -90 or +90 degrees)

Some usage examples:

3    X                  X=3
DEG                     DEG=171.887338539       ; 3 rad = 171.887338539°
STO X TAN               TAN=-1.42546543094E-1   ; tan(3 rad) = -1.42546543094E-1
123456789 X COS         COS=-9.87688340595E-1   ; cos(123456789) = -9.87688340595E-1
777777777717 +/- X SIN  SIN=5.2335956243E-2     ; sin(-777777777717°) = 5.2335956243E-2
0.5 X MORE ACOS         60.0000000002           ; acos(0.5) = 60.0000000002°
shift MATH 3 LN         1.09861228867
2 +/- / EXP EXIT        5.77350269189E-1
MORE STO X MORE ATAN    ATAN=30.0000000001      ; atan(exp(-ln(3)/2)) = 30.0000000001°

We need both: select Courier as font and use e.g. Unicode U+2003 : EM SPACE instead of an ordinary space.
(06-08-2022 02:12 PM)Thomas Klemm Wrote: [ -> ]
(12-15-2014 05:48 PM)Gerson W. Barbosa pid='23033' dateline='1418665718' Wrote: [ -> ]Formatting has been lost in the tables. I have yet to find out how to fix that.

Here's my attempt to fix this:

For example:

sin(0.0000010)   1.7455(0850398)E-8
tan(0.0000010)   1.745(50000000)E-8
asin(0.000001)   5.7295(8368089)E-5
acos(0.999999)   8.1028474(8648)E-2
atan(0.000001)   5.7295(8368089)E-5

This update fixes that:

sin(0.0000010)   1.74532925199E-8
tan(0.0000010)   1.74532925199E-8
asin(0.000001)   5.72957795131E-5
acos(0.999999)   8.1028475206(4)E-2
atan(0.000001)   5.72957795131E-5

We need both: select Courier as font and use e.g. Unicode U+2003 : EM SPACE instead of an ordinary space.

Thank you very much, Thomas! I’ve used a similar method in

(12c Platinum) Fast & Accurate Trigonometric Functions

Best regards,

Gerson.
Reference URL's
• HP Forums: https://www.hpmuseum.org/forum/index.php
• :