Routines 
Prev: 37DA  Up: Map 
The address of this routine is found in the table of addresses. It is called via the calculator literal +24 by the routine at asn. It is also called indirectly via fp_calc_2.
This subroutine handles the function ATN X and is the last of the four routines that use the series generator to produce Chebyshev polynomials. It returns a real number between π/2 and π/2, which is equal to the value in radians of the angle whose tan is X.
The approximation to ATN X is found as follows:
i. The values W and Y are found for three cases of X, such that:
In each case, 1<=Y<=1, as required for the series to converge.
ii. The argument Z is formed, such that:
iii. The series generator is used to produce the required function.
iv. Finally a simple multiplication and addition give ATN X.


Perform step i.


atn  37E2  CALL re_stack  Use the full floatingpoint form of X.  
37E5  LD A,(HL)  Fetch the exponent of X.  
37E6  CP $81  Jump forward for case i: Y=X.  
37E8  JR C,SMALL  
37EA  RST $28  X  
37EB  DEFB $A1  stk_one: X, 1  
37EC  DEFB $1B  negate: X, 1  
37ED  DEFB $01  exchange: 1, X  
37EE  DEFB $05  division: 1/X  
37EF  DEFB $31  duplicate: 1/X, 1/X  
37F0  DEFB $36  less_0: 1/X, (1/0)  
37F1  DEFB $A3  stk_pi_2: 1/X, (1/0), π/2  
37F2  DEFB $01  exchange: 1/X, π/2, (1/0)  
37F3  DEFB $00  jump_true to CASES for case ii: 1/X, π/2  
37F4  DEFB $06  
37F5  DEFB $1B  negate: 1/X, π/2  
37F6  DEFB $33  jump to CASES for case iii: 1/X, π/2  
37F7  DEFB $03  
SMALL  37F8  RST $28  
37F9  DEFB $A0  stk_zero: Y, 0; continue for case i: W=0  
Perform step ii.


CASES  37FA  DEFB $01  exchange: W, Y  
37FB  DEFB $31  duplicate: W, Y, Y  
37FC  DEFB $31  duplicate: W, Y, Y, Y  
37FD  DEFB $04  multiply: W, Y, Y*Y  
37FE  DEFB $31  duplicate: W, Y, Y*Y, Y*Y  
37FF  DEFB $0F  addition: W, Y, 2*Y*Y  
3800  DEFB $A1  stk_one: W, Y, 2*Y*Y, 1  
3801  DEFB $03  subtract: W, Y, 2*Y*Y1=Z  
Perform step iii, passing to the series generator the parameter '12', and the twelve constants required.


3802  DEFB $8C  series_0C: W, Y, Z  
3803  DEFB $10,$B2  
3805  DEFB $13,$0E  
3807  DEFB $55,$E4,$8D  
380A  DEFB $58,$39,$BC  
380D  DEFB $5B,$98,$FD  
3810  DEFB $9E,$00,$36,$75  
3814  DEFB $A0,$DB,$E8,$B4  
3818  DEFB $63,$42,$C4  
381B  DEFB $E6,$B5,$09,$36,$BE  
3820  DEFB $E9,$36,$73,$1B,$5D  
3825  DEFB $EC,$D8,$DE,$63,$BE  
382A  DEFB $F0,$61,$A1,$B3,$0C  
At the end of the last loop the 'last value' is:
Perform step iv.


382F  DEFB $04  multiply: W, ATN X (case i) or W, ATN (1/X) (cases ii and iii)  
3830  DEFB $0F  addition: ATN X (all cases now)  
3831  DEFB $38  end_calc  
3832  RET  Finished: 'last value'=ATN X. 
Prev: 37DA  Up: Map 