Bon puisqu'il faut entrer dans les tests de performances alors pourquoi pas...
Première chose, on ne fait pas de test de vitesse avec le debugger
Deuxième chose, on ne compare pas des fonctions persos avec des fonctions natives. Les fonctions persos contiennent des entêtes qui prennent un petit temps CPU non négligeable comme le montre cet exemple:
Code : Tout sélectionner
Procedure.f Cos_(Angle.f)
!FLD dword [esp]
!FCOS
EndProcedure
cos.f
Angle.f = Random(123)
;test avec la version native
depart = ElapsedMilliseconds()
For t= 0 To 1000000
cos = Cos( Angle )
Next
duree = ElapsedMilliseconds() - depart
MessageRequester(StrF(cos), Str(duree))
;test avec la version perso
depart = ElapsedMilliseconds()
For t= 0 To 1000000
cos = Cos_( Angle )
Next
duree = ElapsedMilliseconds() - depart
MessageRequester(StrF(cos), Str(duree))
Donc pour pouvoir comparer des choses comparables on va commencer par ne pas utiliser la fonction native de PB car si le systeme que je propose était natif il bénéficierai des mêmes augmentations de vitesse puisque les entetes disparaitrait. C'est pourquoi on va se baser une fonction RealCos comme dans l'exemple de cederavic.
Maintenant on fait les tests avec la fonction proposée et aussi avec la version native (remplacée pour les raisons qui précèdent) dans l'exemple que voici:
(ne pas oublier de noter le résultat, en moyenne 125 et 123 pour moi)
Code : Tout sélectionner
;la version proposée (simplifiée)
Enumeration
#PB_Math_Rad
#PB_Math_Deg
#PB_Math_Grd
EndEnumeration
Global Pi.f ;la pseudo constante...
Pi = ValF("3.14159274101257320")
Global _PB_Math_Angles.l, _PB_Math_Coeff.f
_PB_Math_Angles = #PB_Math_Deg ;je garde l'idée des degrés par défaut
_PB_Math_Coeff = _PB_Coeff_Deg ;même si c'est pas le plus important
Procedure.l SetMathAngles(Type.l)
Protected Error.l
Select Type
Case #PB_Math_Rad
_PB_Math_Coeff = 1.0
Case #PB_Math_Deg
_PB_Math_Coeff = Pi / 180
Case #PB_Math_Grd
_PB_Math_Coeff = Pi / 200
Default
Error = #True
EndSelect
If Error = #False
_PB_Math_Angles = Type
EndIf
ProcedureReturn Error ! #True
EndProcedure
Procedure.f Cos_(Angle.f)
If _PB_Math_Angles
Angle * _PB_Math_Coeff
EndIf
!FLD dword [esp]
!FCOS
EndProcedure
;le test
SetMathAngles(#PB_Math_Rad)
cos.f
Angle.f = Pi
depart = ElapsedMilliseconds()
For t= 0 To 1000000
cos = Cos_( Angle )
Next
duree = ElapsedMilliseconds() - depart
MessageRequester(StrF(cos), Str(duree))
;le remplacement de la fonction native
Procedure.f RealCos(Angle.f)
!FLD dword [esp]
!FCOS
EndProcedure
;le test
cos.f
Angle.f = Pi
depart = ElapsedMilliseconds()
For t= 0 To 1000000
cos = RealCos( Angle )
Next
duree = ElapsedMilliseconds() - depart
MessageRequester(StrF(cos), Str(duree))
Voila, je pense que mon teste est un tantinet plus pertinent, et assez révélateur par la même occasion. Maintenant si y'en a qui trouvent encore à redire là dessus je crois que j'ai plus d'arguments cachés dans mes manches.
Dri
