


Code : Tout sélectionner
Procedure.f Exp(x.f)
Protected i.f, t.f, e.f
e = 1.0
t = 1.0
While t
i + 1.0
t * (x / i)
e + t
Wend
ProcedureReturn e
EndProcedure
Debug Exp(1)
Code : Tout sélectionner
#MinFloat = 0.00000001
Procedure.f Exp(x.f)
Protected i.f, t.f, e.f
e = 1.0
t = 1.0
While Abs(t) > #MinFloat
i + 1.0
t * (x / i)
e + t
Wend
ProcedureReturn e
EndProcedure
Procedure.f Ln(x.f)
Protected i.f, xx.f, t.f, ln.f
If x > 0.0
If x > 1.0
ln = -Ln(1.0 / x)
ElseIf x < 1.0
t = 1.0
xx = -1.0
x - 1.0
While Abs(t) > #MinFloat
xx * -x
i + 1.0
t = xx / i
ln + t
Wend
EndIf
ElseIf x = 0.0
ln = (-1.0 / x)
Else ;x négatif
x = 0.0
ln = (0.0 / x)
EndIf
ProcedureReturn ln
EndProcedure
Debug Log(-1.0)
Debug Log(0.0)
Debug Log(0.5)
Debug Log(1.0)
Debug Log(2.0)
Debug "------"
Debug Ln(-1.0)
Debug Ln(0.0)
Debug Ln(0.5)
Debug Ln(1.0)
Debug Ln(2.0)
Code : Tout sélectionner
Procedure.f Puissance(x.f, y.f)
ProcedureReturn Exp(y*Ln(x))
EndProcedure
Debug Pow (9.3, 5.2)
Debug Puissance(9.3, 5.2)
Code : Tout sélectionner
Procedure.f Exp(x.f, Precision.l)
i.f
t.f
e.f
e = 1.0
t = 1.0
While t And Precision => 0
Precision - 1
i + 1.0
t * (x / i)
e + t
Debug StrF(i, 20) + " " + StrF(t, 20) + " " + StrF(e, 20)
Wend
ProcedureReturn e
EndProcedure
Debug StrF(Exp(1, Precision = 10), 20)
C'est assez vexant d'ailleurs d'avoir un overflow quand ca n'est pas le cas...fweil a écrit :@Dr Dri,
Mais le rendu du résultat sous forme de chaine est assez pauvre et l'affectation d'une valeur aussi (limitation du nombre de décimales moins bon que ce que permet le format binaire).
Code : Tout sélectionner
double.d
int_64.q