**HP Articles Forum**

[Return to the Index ]

[ Previous | Next ]

**Improved TRIG. and INVERSE TRIG. functions for the HP-17BII**

*Posted by W. B. Maguire II on 26 Sept 2001, 12:40 p.m.*

+------------------------------------------------------------------------------+ | If _anyone_ finds this post useful, please validate me with a response! ;-) | +------------------------------------------------------------------------------+

**
Background:
**

OK. I *really* like the HP-17BII. It has the great Pioneer dimensions.
It has a nice, big 22-character display. It has dedicated soft-keys and
a second line in the display for their labels.
(I think I prefer this soft-key implementation to the 42's overloading
of the soft-keys. I'll be in a menu and think I have access to those functions
on the top row of keys. The dedicated soft keys [pioneered by the 28c/s] seem
to be more intuitive to me.)

Anyway, being an engineer, I break out in a rash if I don't have access to the trigonometric and inverse-trig. functions.

So, to borrow from "Animal House":

*I think that this situation absolutely requires a really futile and stupid
gesture be done on somebody's part. And I'm just the guy to do it.*

Several weeks ago, I posted my routines for calculating the TRIG. and
INVERSE TRIG. functions. Unfortunately, I didn't realize that the factorial
function existed on the 17BII! Duh! I also did not know about the undocumented
"L()" and "G()" (Let and Get) functions. I *strongly* encourage anyone
who would like to program the 17BII to buy the CD-ROMs from the HP Museum
in order to obtain the "Technical Applications" book for the 27S and 19B.
The undocumented "Let" and "Get" functions are described, as well as
methods of executing looping---these functions open-up programming options
that were not conceivable before! For instance: definite loops and invisible,
temporary variable assignments. Definitely a *MUST READ!* By the way,
in my opinion, these functions completely put to rest the question of whether
the 17BII and 19BII are "programmable"---they *absolutely* are!

So, anyway, here is my self-redemption for those embarassing, brute-force routines.

**
Equation Descriptions:
**

The following equations for the HP-17BII calculate the TRIG. and INVERSE TRIG. functions. I originally had larger formulas that combined SIN,COS,TAN into one equation, and ASIN,ACOS,ATAN into one equation. But, I wanted to minimize the "CALC" time for these formulas, since it's just overhead. As a result, I have left out the TAN function, because it is very easy to enter the angle, press [SIN] then [COS] then the divide key. Since ASIN and ACOS are so similar, they are in one equation, but ATAN is just different enough to (in my mind) justify a seperate equation.

Another approach---which I still might consider---is to cram all desired functions into one single equation, and then try not to leave the solve menu. Getting back into the solve menu would take literally minutes of "CALC" time!

In the interest of accuracy, the inverse trig. functions are divided into multiple domains, so that the polynomials converge faster. The ASIN and ACOS have two domains: [0,PI/4] and [PI/4,PI/2]. The ATAN is a little more complicated; its domains are: [0,~0.3927], [~0.3927,~1.1781], and [~1.1781,inf). The accuracy for the ATAN function is MUCH better than a tangent Taylor series approximation (and therefore MUCH faster). After the routine listings, I have computed (using Matlab) the worst-case accuracy of the equations, given various maximum-exponent values (in the polynomial series).

In the following equations: "SIGMA" means the sigma symbol:

(In the ALPHA menu: [WXYZ][OTHER][MORE], then the second button)"ANGLE" means the angle symbol:

(In the ALPHA menu: [WXYZ][OTHER][MORE][MORE][MORE][MORE], then the fifth button)The formula for the SIN and COS was kindly supplied by Kynes.

**
Equation Listings:
**

DEGREES~RADIANS: DEG/180*PI=RADSIN,COS,D~R: IF(S(SIN): SIGMA(N:0:9:1:(-1)^N* ANGLE^(2*N+1)/FACT(2N+1))-SIN : IF (S(COS): SIGMA(N:0:9:1:(-1)^N* ANGLE^(2*N)/FACT(2N))-COS : DEG/180*PI-RAD ) )

ASIN,ACOS,D~R: IF(NOT (S(DEG) OR S(RAD)): 0* IF(X<.7071: L(R3:X)+ IF(S(ASIN): L(R1:0)+L(R2:1) : L(R1=1)+L(R2=-1) ) : L(R3:SQRT(1-SQ(X)))+ IF(S(ASIN): L(R1=1)+L(R2=-1) : L(R1:0)+L(R2:1) ) ) +G(R1)*PI/2+G(R2)*( G(R3)+ SIGMA(N:3:31:2: (FACT(N-2)*(G(R3))^N/ (2^(N-2)*FACT((N-3)/2)*FACT((N-1)/2)*N))) ) - IF(S(ASIN): ASIN : ACOS ) : DEG/180*PI-RAD )

ATAN,D~R: IF(NOT (S(DEG) OR S(RAD)): 0* IF(L(AA:ABS(SQ(X)-1)/(SQ(X)+1))<.7071: L(R1:.5)+ L(R2:SGN(X-1)/2)+ L(R3:G(AA)) : L(R1:.5+SGN(X-1)/2)+ L(R2:.5-G(R1))+ L(R3:2*X/(SQ(X)+1)) ) +G(R1)*PI/2+G(R2)*( G(R3)+ SIGMA(N:3:31:2: (FACT(N-2)*(G(R3))^N/ (2^(N-2)*FACT((N-3)/2)*FACT((N-1)/2)*N))) ) -ATAN : DEG/180*PI-RAD )

**
Sample Calculations:
**

Sin(30 degrees):

"CALC" the SIN,COS equation, then press:

30[DEG][RAD][STO][angle-key][SIN]Answer = 0.5000

---------------------------------

Tan(45 degrees):

"CALC" the SIN,COS equation, then press:

45[DEG][RAD][STO][angle-key][SIN][COS][divide-key]Answer = 1.0000

---------------------------------

ArcSin(0.5):

"CALC" the ASIN,ACOS equation, then press:

0.5[X][ASIN]Answer = 0.5236 radians

To get the answer in degrees, press:

[STO][RAD][DEG]Answer = 30.000 degrees

---------------------------------

The ArcTan function works the same as the ArcSin and ArcCos, but you need to "CALC" the ATAN equation, rather than the ASIN,ACOS equation.

**
Accuracy Calculations:
**

For the following accuracy calculations, Matlab was used. Therefore the following accuracies are closer to the theoretical accuracy of the previous algorithms. 'Epsilon'---in the computational context---means the smallest number (in a computer) that may be added to one, and yield a result that is greater than one. It is a measure of the precision that the computer uses to represent numbers (really the number of bits for the mantissa). The Epsilon for the HP-17BII is about 5e-12. (I presented an equation to show this for the HP-17BII in a separate posting.) The Epsilon for Matlab is about 2e-16. Therefore, the HP-17BII will not be any more accurate than 5e-12 in the best case (not O(10^-16) as indicated in some cases below).

For the SIN,COS equation (COS accuracy is the same as SIN): ----------------------------------------------------------- Highest exponent of 5, gives maximum normalized SIN error of 5.62e-08 Highest exponent of 7, gives maximum normalized SIN error of 6.02e-12 Highest exponent of 9, gives maximum normalized SIN error of 5.55e-16 Highest exponent of 11, gives maximum normalized SIN error of 5.41e-16Highest exponent of 5, gives maximum normalized SIN/COS error of 4.84e-03 Highest exponent of 7, gives maximum normalized SIN/COS error of 6.76e-07 Highest exponent of 9, gives maximum normalized SIN/COS error of 3.67e-11 Highest exponent of 11, gives maximum normalized SIN/COS error of 1.21e-12

For the ASIN equation (ACOS accuracy is the same as ASIN): ---------------------------------------------------------- Highest exponent of 15, gives maximum normalized ASIN error of 7.10e-05 Highest exponent of 17, gives maximum normalized ASIN error of 3.03e-05 Highest exponent of 19, gives maximum normalized ASIN error of 1.32e-05 Highest exponent of 21, gives maximum normalized ASIN error of 5.78e-06 Highest exponent of 23, gives maximum normalized ASIN error of 2.57e-06 Highest exponent of 25, gives maximum normalized ASIN error of 1.15e-06 Highest exponent of 27, gives maximum normalized ASIN error of 5.19e-07 Highest exponent of 29, gives maximum normalized ASIN error of 2.36e-07 Highest exponent of 31, gives maximum normalized ASIN error of 1.08e-07 Highest exponent of 33, gives maximum normalized ASIN error of 4.95e-08 Highest exponent of 35, gives maximum normalized ASIN error of 2.29e-08 Highest exponent of 37, gives maximum normalized ASIN error of 1.06e-08 Highest exponent of 39, gives maximum normalized ASIN error of 4.92e-09 Highest exponent of 41, gives maximum normalized ASIN error of 2.30e-09

Accuracy for ATAN in the ATAN equation is the same as ASIN and ACOS.

Now, all the HP-17BII needs is an "Engineering" display mode!

Bruce.