My solution to ATAN2, in the 80, when I was using a TRS-80 Model III
For extended-precision values, make the necessary changes.
Test code:
atan2 test.zip
For extended-precision values, make the necessary changes.
Code:
[color=000000]120 R1[/color][color=8000FF]=[/color][color=000000]57.29578! [/color][color=007F00]' ' SE contains delta sin ' SN contains delta cos ' ATAN2 returns in X ' [/color][color=000000]1910 [/color][color=0000C0]IF [/color][color=000000]SN[/color][color=8000FF]=[/color][color=000000]0 [/color][color=0000C0]THEN [/color][color=000000]X[/color][color=8000FF]=[/color][color=000000]90[/color][color=8000FF]-([/color][color=000000]SE<[/color][color=8000FF];[/color][color=000000]0[/color][color=8000FF])*[/color][color=000000]90 [/color][color=0000C0]ELSE [/color][color=000000]X[/color][color=8000FF]=[/color][color=0000C0]ATN[/color][color=8000FF]([/color][color=000000]SE[/color][color=8000FF]/[/color][color=000000]SN[/color][color=8000FF])*[/color][color=000000]R1[/color][color=8000FF]-([/color][color=000000]SN<[/color][color=8000FF];[/color][color=000000]0[/color][color=8000FF])*[/color][color=000000]180[/color][color=8000FF]:[/color][color=0000C0]IF [/color][color=000000]X<[/color][color=8000FF];[/color][color=000000]0 [/color][color=0000C0]THEN [/color][color=000000]X[/color][color=8000FF]=[/color][color=000000]X[/color][color=8000FF]+[/color][color=000000]360 [/color]
Code:
[color=0000C0]#COMPILE EXE #DIM ALL FUNCTION PBMAIN [/color][color=8000FF]() [/color][color=0000C0]AS LONG LOCAL [/color][color=000000]R1[/color][color=8000FF], [/color][color=000000]SE[/color][color=8000FF], [/color][color=000000]SN[/color][color=8000FF], [/color][color=000000]X [/color][color=0000C0]AS SINGLE [/color][color=000000]120 R1[/color][color=8000FF]=[/color][color=000000]57.29578! 1200 SE[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 0:SN= 0: ATAN2 should be 0" [/color][color=000000]X [/color][color=007F00]'prints 0 [/color][color=000000]1210 SE[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 0:SN= 1: ATAN2 should be 0" [/color][color=000000]X [/color][color=007F00]'prints 0 [/color][color=000000]1220 SE[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 1:SN= 1: ATAN2 should be 45" [/color][color=000000]X [/color][color=007F00]'prints 45 [/color][color=000000]1230 SE[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 1:SN= 0: ATAN2 should be 90" [/color][color=000000]X [/color][color=007F00]'prints 90 [/color][color=000000]1240 SE[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 1:SN=-1: ATAN2 should be 135" [/color][color=000000]X [/color][color=007F00]'prints 135 [/color][color=000000]1250 SE[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 0:SN=-1: ATAN2 should be 180" [/color][color=000000]X [/color][color=007F00]'prints 180 [/color][color=000000]1260 SE[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE=-1:SN=-1: ATAN2 should be 225" [/color][color=000000]X [/color][color=007F00]'prints 225 [/color][color=000000]1270 SE[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE=-1:SN= 0: ATAN2 should be 270" [/color][color=000000]X [/color][color=007F00]'prints 270 [/color][color=000000]1280 SE[/color][color=8000FF]=-[/color][color=000000]1[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE=-1:SN= 1: ATAN2 should be 315" [/color][color=000000]X [/color][color=007F00]'prints 315 [/color][color=000000]1290 SE[/color][color=8000FF]= [/color][color=000000]0[/color][color=8000FF]:[/color][color=000000]SN[/color][color=8000FF]= [/color][color=000000]1[/color][color=8000FF]:[/color][color=0000C0]GOSUB [/color][color=000000]1910[/color][color=8000FF]: [/color][color=0000C0]PRINT [/color][color=C020C0]"For SE= 0:SN= 1: ATAN2 should be 0" [/color][color=000000]X [/color][color=007F00]'prints 0 [/color][color=0000C0]WAITKEY$ EXIT FUNCTION [/color][color=000000]1910 [/color][color=0000C0]IF [/color][color=000000]SN[/color][color=8000FF]=[/color][color=000000]0 [/color][color=0000C0]THEN [/color][color=000000]X[/color][color=8000FF]=-([/color][color=000000]SE[/color][color=8000FF]<>[/color][color=000000]0[/color][color=8000FF])*([/color][color=000000]90[/color][color=8000FF]-([/color][color=000000]SE[/color][color=8000FF]<[/color][color=000000]0[/color][color=8000FF])*[/color][color=000000]180[/color][color=8000FF]) [/color][color=0000C0]ELSE [/color][color=000000]X[/color][color=8000FF]=[/color][color=0000C0]ATN[/color][color=8000FF]([/color][color=000000]SE[/color][color=8000FF]/[/color][color=000000]SN[/color][color=8000FF])*[/color][color=000000]R1[/color][color=8000FF]-([/color][color=000000]SN[/color][color=8000FF]<[/color][color=000000]0[/color][color=8000FF])*[/color][color=000000]180[/color][color=8000FF]:[/color][color=0000C0]IF [/color][color=000000]X[/color][color=8000FF]<[/color][color=000000]0 [/color][color=0000C0]THEN [/color][color=000000]X[/color][color=8000FF]=[/color][color=000000]X[/color][color=8000FF]+[/color][color=000000]360 1920 [/color][color=0000C0]RETURN END FUNCTION [/color]
Comment