Routines 
Prev: 3713  Up: Map 
The address of this routine is found in the table of addresses. It is called via the calculator literal +39 by the routines at cos and sin.
This subroutine transforms the argument X of SIN X or COS X into a value V.
The subroutine first finds the value Y=X/2πINT(X/2π+0.5), where 0.5<=Y<0.5.
The subroutine returns with:
In each case, 1<=V<=1 and SIN (πV/2)=SIN X.


get_argt  3783  RST $28  X  
3784  DEFB $3D  re_stack: X (in full floatingpoint form)  
3785  DEFB $34  stk_data: X, 1/2π  
3786  DEFB $EE,$22,$F9,$83,$6E  
378B  DEFB $04  multiply: X/2π  
378C  DEFB $31  duplicate: X/2π, X/2π  
378D  DEFB $A2  stk_half: X/2π, X/2π, 0.5  
378E  DEFB $0F  addition: X/2π, X/2π+0.5  
378F  DEFB $27  int: X/2π, INT (X/2π+0.5)  
3790  DEFB $03  subtract: X/2πINT (X/2π+0.5)=Y  
Note: adding 0.5 and taking INT rounds the result to the nearest integer.


3791  DEFB $31  duplicate: Y, Y  
3792  DEFB $0F  addition: 2*Y  
3793  DEFB $31  duplicate: 2*Y, 2*Y  
3794  DEFB $0F  addition: 4*Y  
3795  DEFB $31  duplicate: 4*Y, 4*Y  
3796  DEFB $2A  abs: 4*Y, ABS (4*Y)  
3797  DEFB $A1  stk_one: 4*Y, ABS (4*Y), 1  
3798  DEFB $03  subtract: 4*Y, ABS (4*Y)1=Z  
3799  DEFB $31  duplicate: 4*Y, Z, Z  
379A  DEFB $37  greater_0: 4*Y, Z, (1/0)  
379B  DEFB $C0  st_mem_0: (mem0 holds the result of the test)  
379C  DEFB $00  jump_true to ZPLUS: 4*Y, Z  
379D  DEFB $04  
379E  DEFB $02  delete: 4*Y  
379F  DEFB $38  end_calc: 4*Y=V (case i)  
37A0  RET  Finished.  
If the jump was made then continue.


ZPLUS  37A1  DEFB $A1  stk_one: 4*Y, Z, 1  
37A2  DEFB $03  subtract: 4*Y, Z1  
37A3  DEFB $01  exchange: Z1, 4*Y  
37A4  DEFB $36  less_0: Z1, (1/0)  
37A5  DEFB $00  jump_true to YNEG: Z1  
37A6  DEFB $02  
37A7  DEFB $1B  negate: 1Z  
YNEG  37A8  DEFB $38  end_calc: 1Z=V (case ii) or Z1=V (case iii)  
37A9  RET  Finished. 
Prev: 3713  Up: Map 