UnderwareDESIGN

PlayBASIC => Resources => Source Codes => Topic started by: kevin on December 14, 2003, 09:00:01 PM

Title: Fixed Point LIbrary
Post by: kevin on December 14, 2003, 09:00:01 PM
[pbcode]

Constant PI=205887
Constant PI_OVER_2=PI/2


rem Test plot ----------------------------------------------------
pi# = 3.14159265359
for x = 0 to 360
 rad# = x * pi# / 180
 fpRad = float2FP(rad#)
 mysin# = FP2Float(fp_Sin(fpRad))
 mycos# = FP2Float(fp_Cos(fpRad))
 dotc x,(mysin# * 100) + 200,rgb(255,0,0)
 dotc x,(mycos# * 100) + 200,rgb(0,0,255)
next x
sync
waitkey
end
rem Test plot end -------------------------------------------------


Psub Float2FP(value#)
 result = value# * 65536
endPsub result

Psub fp2Float(value)
 result# = value / 65536.0
endPSUB result#

psub fp_Add(Value1, Value2)
   result=Value1+Value2
endpsub result


psub fp_Sub(Value1, Value2)
   result=Value1-Value2
endpsub result



Psub fp_Mul(Value1, Value2)
 if abs(value1) > abs(value2)
     result = value1 / 256 * value2 / 256
 else
     result = value2 / 256  * value1 / 256
 endif
endPsub result

Psub fp_Div(Value1, Value2)
 result = (value1 * 256) / (Value2 / 256)
endPsub result

Psub fp_Sqrt(Value)
 result = (Value + 65536) / 2
 for i = 0 to 7
     result = (result + fp_Div(Value,result)) / 2
 next i
endPsub result

Psub fp_Sin(Value)
 rem Ported from the Java IAppli Fixed Point Math Library
 rem http://www.ai.mit.edu/people/hqm/imode/fplib (http://www.ai.mit.edu/people/hqm/imode/fplib)

 SK1 = 498
 SK2 = 10882
 sign = 1
 if (Value > PI_Over_2) and (value <= PI) then Value = PI - Value
 if (Value > PI) and (Value <= (PI + PI_Over_2))
     Value = Value - PI
     sign = -1
 endif
 if (Value > (PI + PI_Over_2))
     Value = (PI * 2) - Value
     sign = -1
 endif

 sqr = fp_Mul(Value,Value)
 result = SK1
 result = fp_MUL(result,sqr)
 result = result - SK2
 result = fp_Mul(result,sqr)
 result = result + 65536
 result = fp_Mul(result, value)
 result = sign * result
endpsub result

Psub fp_Cos(Value)
 rem Ported from the Java IAppli Fixed Point Math Library
 rem http://www.ai.mit.edu/people/hqm/imode/fplib (http://www.ai.mit.edu/people/hqm/imode/fplib)

 CK1 = 2328
 CK2 = 32551
 sign = 1
 if (Value > PI_Over_2) and (Value <= PI)
     value = PI - value
     sign = -1
 else
     if (Value > PI_Over_2) and (Value <= (PI + PI_Over_2))
       value = value - PI
       sign = -1
     endif
 endif
 if Value > (PI + PI_Over_2) then value = (PI*2)-value

 sqr = fp_Mul(Value,Value)
 result = CK1
 result = fp_MUL(result,sqr)
 result = result - CK2
 result = fp_Mul(result,sqr)
 result = result + 65536
 result = result * sign
endPsub result

[/pbcode]


Title: Fixed Point LIbrary
Post by: empty on December 14, 2003, 09:00:55 PM
Well, you're quick... ;)
Title: Fixed Point LIbrary
Post by: kevin on December 14, 2003, 09:06:49 PM
I guess, not a lot to port though :).. I mean it's not like their similar at all .. erm..   :rolleyes: