Main Menu

Fixed Point LIbrary

Started by kevin, December 14, 2003, 09:00:01 PM

Previous topic - Next topic

kevin

PlayBASIC Code: [Select]
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

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

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






empty


kevin

I guess, not a lot to port though :).. I mean it's not like their similar at all .. erm..   :rolleyes: