Fred a écrit :C'est parce que c'est pas égal, tout simplement
Eh oui, mais pour le comprendre il faut qu'il lise cette page de
l'aide de PureBasic (tout en bas)
@GallyHC : j'avais testé quand même
@Ar-S : Ta méthode fonctionne, mais je pense qu'il serait plus adéquate de mettre un intervalle plutôt que de passer par des string
Tiens, je me suis amusé à comparer les vitesses d'exécutions entre les différentes méthodes.
Conclusion (sans faire de tests ANOVA) : l'utilisation de chaine est 1000 fois plus lente que les méthodes numériques.
Mais entre les autres méthodes, il n'apparait pas de différences significatives.
Ma préférence irai vers la macro avec ABS()
Code : Tout sélectionner
DisableDebugger
_Debug$ = ""
Macro IS_EGAL(nb1, nb2, intervalle)
(Abs(nb1 - nb2) <= intervalle * 1.1)
EndMacro
Macro IS_EGAL1(nb1, nb2, intervalle)
(nb1 - intervalle <= nb2) And (nb1 + intervalle >= nb2)
EndMacro
Macro IS_EGAL_STRING(nb1, nb2, nb_dec)
StrF(nb1, nb_dec) = StrF(nb2, nb_dec)
EndMacro
a.f = 21.3
b.f = 2.65
c.f = a-2*b
d.f = 16.0
_Debug$ + #CR$ + StrF(c)
_Debug$ + #CR$ + StrF(d)
If IS_EGAL(c, d, 0.01)
_Debug$ + #CR$ + "EGAL"
Else
_Debug$ + #CR$ + "Inégal"
EndIf
_Debug$ + #CR$ + ""
_Debug$ + #CR$ + "autre test"
_Debug$ + #CR$ + ""
c = 165.356
d = 165.355
_Debug$ + #CR$ + StrF(c)
_Debug$ + #CR$ + StrF(d)
If IS_EGAL(c, d, 0.001)
_Debug$ + #CR$ + "EGAL à 0,001 près"
Else
_Debug$ + #CR$ + "Inégal"
EndIf
If IS_EGAL1(c, d, 0.001)
_Debug$ + #CR$ + "EGAL à 0,001 près"
Else
_Debug$ + #CR$ + "Inégal"
EndIf
If IS_EGAL_STRING(c, d, 3)
_Debug$ + #CR$ + "EGAL à 3 decimales près"
Else
_Debug$ + #CR$ + "Inégal"
EndIf
If IS_EGAL(c, d, 0.0001)
_Debug$ + #CR$ + "EGAL à 0,0001 près"
Else
_Debug$ + #CR$ + "Inégal"
EndIf
nb = 1000000000
t = ElapsedMilliseconds()
For i = 0 To nb
If IS_EGAL(c, d, 0.0001)
Else
EndIf
Next
_Debug$ + #CR$ + "1 000 000 000 de tests : Macro : ABS() " + Str(ElapsedMilliseconds()-t)
t = ElapsedMilliseconds()
For i = 0 To nb
If IS_EGAL1(c, d, 0.0001)
Else
EndIf
Next
_Debug$ + #CR$ + "1 000 000 000 de tests : Macro : <= et >= " + Str(ElapsedMilliseconds()-t)
t = ElapsedMilliseconds()
For i = 0 To nb
If c = d
Else
EndIf
Next
_Debug$ + #CR$ + "1 000 000 000 de tests : référence " + Str(ElapsedMilliseconds()-t)
t = ElapsedMilliseconds()
For i = 0 To 1000000
If IS_EGAL_STRING(c, d, 3)
Else
EndIf
Next
_Debug$ + #CR$ + " 1 000 000 de tests : Macro : strf() " + Str(ElapsedMilliseconds()-t)
MessageRequester("", _Debug$)