Sin/Cos/Tan mit Double Genauigkeit
Verfasst: 27.03.2009 13:34
Servus.
Nachdem PB Winkelfunktionen nur mit Float - Genauigkeit beherrscht hab ich mir Sinus, Cosinus und Tangens mal komplett selbst in Double - Genauigkeit programmiert. Ich weis das es unter Windows dafür schon Befehle gibt, aber es ging mir ums Ausprobieren und außerdem ist der Source so Cross Plattform fähig.
Hier der Code, viel Spaß damit
:
Gruß, Alex
Nachdem PB Winkelfunktionen nur mit Float - Genauigkeit beherrscht hab ich mir Sinus, Cosinus und Tangens mal komplett selbst in Double - Genauigkeit programmiert. Ich weis das es unter Windows dafür schon Befehle gibt, aber es ging mir ums Ausprobieren und außerdem ist der Source so Cross Plattform fähig.
Hier der Code, viel Spaß damit

Code: Alles auswählen
; Fakultät
Procedure.d _Fac(n)
Protected tDouble.d = 1
For i = 2 To n
tDouble*i
Next
ProcedureReturn tDouble
EndProcedure
; Ohne 0 - Regel und nur für ganze Zahlen
Procedure.d _PowD(Num.d, Exp)
Static i, oldNum.d
oldNum = Num
Exp-1
For i = 1 To Exp
Num*oldNum
Next
ProcedureReturn Num
EndProcedure
; Sinus mit Double - Genauigkeit
Procedure.d SinD(rad.d)
Static negate, rtvar.d, lrtvar.d, exp, i
negate = -1
rtvar = rad
i = 1
Repeat
exp = i*2 + 1
rtvar + (((_PowD(rad, exp))/_Fac(exp))*negate)
If lrtvar = rtvar
Break
EndIf
lrtvar = rtvar
negate*-1
i+1
ForEver
ProcedureReturn rtvar
EndProcedure
; Cosinus mit Double - Genauigkeit
Procedure.d CosD(rad.d)
ProcedureReturn SinD(rad.d+1.5707963267948966)
EndProcedure
; Tangens mit Double - Genauigkeit
Procedure.d TanD(rad.d)
ProcedureReturn SinD(rad)/CosD(rad)
EndProcedure
Macro Demo_SF(Angel)
Debug "-----------------------------------------"
Debug "Sinus: "
Debug "PB: "
Debug Sin(Angel)
Debug "Double: "
Debug SinD(Angel)
Debug "-----------------------------------------"
Debug "-----------------------------------------"
Debug "Cosinus: "
Debug "PB: "
Debug Cos(Angel)
Debug "Double: "
Debug CosD(Angel)
Debug "-----------------------------------------"
Debug "-----------------------------------------"
Debug "Tangens: "
Debug "PB: "
Debug Tan(Angel)
Debug "Double: "
Debug TanD(Angel)
Debug "-----------------------------------------"
EndMacro
Demo_SF(9.8765432109876)