Hi Bane,
From your post on Robot Forum, it looks like you simply output the values from this table and compared it to what excel shows for arccos, which is probably not correct. I know that Xan spent a reasonable amount of time on the code to make it accurate. That is why I believe that the code actually uses this byttable in three parts. I think your graph might look better if you did something like:
[code];GetSinCos / ArcCos
c1DEC con 10
c2DEC con 100
c4DEC con 10000
AngleDeg1 var sword ;!!!sword ;Input Angle in degrees, decimals = 1
ABSAngleDeg1 var word ;Absolute value of the Angle in Degrees, decimals = 1
sin4 var sword ;!!!sword ;Output Sinus of the given Angle, decimals = 4
cos4 var sword ;!!!sword ;Output Cosinus of the given Angle, decimals = 4
AngleRad4 var sword ;!!!sword ;Output Angle in radials, decimals = 4
NegativeValue var bit ;If the the value is Negative
; Local test stuff…
cos4t var sword
ar4t var sword
GetACos bytetable 255,254,252,251,250,249,247,246,245,243,242,241,240,238,237,236,234,233,232,231,229,228,227,225, |
224,223,221,220,219,217,216,215,214,212,211,210,208,207,206,204,203,201,200,199,197,196,195,193, |
192,190,189,188,186,185,183,182,181,179,178,176,175,173,172,170,169,167,166,164,163,161,160,158, |
157,155,154,152,150,149,147,146,144,142,141,139,137,135,134,132,130,128,127,125,123,121,119,117, |
115,113,111,109,107,105,103,101,98,96,94,92,89,87,84,81,79,76,73,73,73,72,72,72,71,71,71,70,70, |
70,70,69,69,69,68,68,68,67,67,67,66,66,66,65,65,65,64,64,64,63,63,63,62,62,62,61,61,61,60,60,59, |
59,59,58,58,58,57,57,57,56,56,55,55,55,54,54,53,53,53,52,52,51,51,51,50,50,49,49,48,48,47,47,47, |
46,46,45,45,44,44,43,43,42,42,41,41,40,40,39,39,38,37,37,36,36,35,34,34,33,33,32,31,31,30,29,28, |
28,27,26,25,24,23,23,23,23,22,22,22,22,21,21,21,21,20,20,20,19,19,19,19,18,18,18,17,17,17,17,16, |
16,16,15,15,15,14,14,13,13,13,12,12,11,11,10,10,9,9,8,7,6,6,5,3,0
for cos4t = 0 to 9999 step 20
gosub GetArcCos[cos4t], ar4t
serout s_out, i9600, “Arccos .”,dec4 cos4t, " =", dec ar4t, 13]
next
stop
;--------------------------------------------------------------------
;[GETARCCOS] Get the sinus and cosinus from the angle +/- multiple circles
;Cos4 - Input Cosinus
;AngleRad4 - Output Angle in AngleRad4
GetArcCos[Cos4]
;Check for negative value
IF (Cos4<0) THEN
Cos4 = -Cos4
NegativeValue = 1
ELSE
NegativeValue = 0
ENDIF
;Limit Cos4 to his maximal value
Cos4 = (Cos4 max c4DEC)
IF (Cos4>=0 AND Cos4<9000) THEN
AngleRad4 = GetACos(Cos4/79) ;79=table resolution (1/127)
AngleRad4 = AngleRad4*616/c1DEC ;616=acos resolution (pi/2/255)
ELSEIF (Cos4>=9000 AND Cos4<9900)
AngleRad4 = GetACos((Cos4-9000)/8+114) ;8=table resolution (0.1/127), 114 start address 2nd bytetable range
AngleRad4 = AngleRad4*616/c1DEC ;616=acos resolution (pi/2/255)
ELSEIF (Cos4>=9900 AND Cos4<=10000)
AngleRad4 = GetACos((Cos4-9900)/2+227) ;2=table resolution (0.01/64), 227 start address 3rd bytetable range
AngleRad4 = AngleRad4*616/c1DEC ;616=acos resolution (pi/2/255)
ENDIF
;Add negative sign
IF NegativeValue THEN
AngleRad4 = 31416 - AngleRad4
ENDIF
return AngleRad4
[/code]
Note: I did not run this, but the idea is the code should generate about 500 values where each of the values passed on different by: .0020 or in the code by 20 as we are using fixed point here with 4 decimal places.
Kurt