Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.
Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés qu'on
rencontre False ?
> En fait, je pensait qu'on parlait de performance et donc - If V Then est "plus mieux" que - If V = True Then
(sans vouloir pinailler)
oui si le test etait vraiment important pour la, mais le v = true etait tiré au hasard et un peu forcé ds mon choix en voyant le true de son algo. mais lexemple aurait pu etre j >= 11
mais dans les exemples que jai cité, ce n'ets pas le contenu du test de comparaison qui compte, mais l'algo des if else.
d'ou le fait quon s'écarte.
-- ----- http://dark.freezee.org/
> En fait, je pensait qu'on parlait de performance et donc
- If V Then
est "plus mieux" que
- If V = True Then
(sans vouloir pinailler)
oui si le test etait vraiment important pour la, mais le v = true etait tiré
au hasard et un peu forcé ds mon choix en voyant le true de son algo. mais
lexemple aurait pu etre j >= 11
mais dans les exemples que jai cité, ce n'ets pas le contenu du test de
comparaison qui compte, mais l'algo des if else.
> En fait, je pensait qu'on parlait de performance et donc - If V Then est "plus mieux" que - If V = True Then
(sans vouloir pinailler)
oui si le test etait vraiment important pour la, mais le v = true etait tiré au hasard et un peu forcé ds mon choix en voyant le true de son algo. mais lexemple aurait pu etre j >= 11
mais dans les exemples que jai cité, ce n'ets pas le contenu du test de comparaison qui compte, mais l'algo des if else.
d'ou le fait quon s'écarte.
-- ----- http://dark.freezee.org/
Thierry Bertrand
Si t'as pas peur des goto, alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then if not B then goto YaPasAFaire end if ' ' là ya à faire ' .... ' YaPasAFaire: ' ' suite du bignz '
"Patrice Henrio" a écrit dans le message de news: #IGFhaM#
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb évalue A et B, même si c'est inutile puisque quelque soit la valeur booléenne de B, le résultat est True.
Private Sub Command1_Click() Dim X As Integer Dim B As Boolean B = True Or ((1 / X) = 0) Debug.Print B End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
qu'on
rencontre False ?
Si t'as pas peur des goto,
alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then
if not B then goto YaPasAFaire
end if
'
' là ya à faire
'
....
'
YaPasAFaire:
'
' suite du bignz
'
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news: #IGFhaM#EHA.2568@TK2MSFTNGP11.phx.gbl...
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.
Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
Si t'as pas peur des goto, alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then if not B then goto YaPasAFaire end if ' ' là ya à faire ' .... ' YaPasAFaire: ' ' suite du bignz '
"Patrice Henrio" a écrit dans le message de news: #IGFhaM#
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb évalue A et B, même si c'est inutile puisque quelque soit la valeur booléenne de B, le résultat est True.
Private Sub Command1_Click() Dim X As Integer Dim B As Boolean B = True Or ((1 / X) = 0) Debug.Print B End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
qu'on
rencontre False ?
Patrice Henrio
Je vous remercie de vos précisions, y compris le rappel de la loi de Morgan sur le Et et le Ou. En fait le problème que je vais me décider à traiter un jour est de savoir si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action else if B then action else if C then action else if D then action end if enf if end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit dans le message de news: e2iSSSW%
Si t'as pas peur des goto, alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then if not B then goto YaPasAFaire end if ' ' là ya à faire ' .... ' YaPasAFaire: ' ' suite du bignz '
"Patrice Henrio" a écrit dans le message de news: #IGFhaM#
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb évalue A et B, même si c'est inutile puisque quelque soit la valeur booléenne de B, le résultat est True.
Private Sub Command1_Click() Dim X As Integer Dim B As Boolean B = True Or ((1 / X) = 0) Debug.Print B End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
qu'on
rencontre False ?
Je vous remercie de vos précisions, y compris le rappel de la loi de Morgan
sur le Et et le Ou.
En fait le problème que je vais me décider à traiter un jour est de savoir
si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action
else if B then action
else if C then action
else if D then action
end if
enf if
end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui
prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit
dans le message de news: e2iSSSW%23EHA.3372@TK2MSFTNGP10.phx.gbl...
Si t'as pas peur des goto,
alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then
if not B then goto YaPasAFaire
end if
'
' là ya à faire
'
....
'
YaPasAFaire:
'
' suite du bignz
'
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news: #IGFhaM#EHA.2568@TK2MSFTNGP11.phx.gbl...
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B",
Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.
Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
Je vous remercie de vos précisions, y compris le rappel de la loi de Morgan sur le Et et le Ou. En fait le problème que je vais me décider à traiter un jour est de savoir si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action else if B then action else if C then action else if D then action end if enf if end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit dans le message de news: e2iSSSW%
Si t'as pas peur des goto, alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
d'où l'horible algo suivant:
if not A then if not B then goto YaPasAFaire end if ' ' là ya à faire ' .... ' YaPasAFaire: ' ' suite du bignz '
"Patrice Henrio" a écrit dans le message de news: #IGFhaM#
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb évalue A et B, même si c'est inutile puisque quelque soit la valeur booléenne de B, le résultat est True.
Private Sub Command1_Click() Dim X As Integer Dim B As Boolean B = True Or ((1 / X) = 0) Debug.Print B End Sub
Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
qu'on
rencontre False ?
Thierry Bertrand
Tou dépendra de la fréquence de réponse vrai / faux aux tests a b c et d, que tu auras intérêt à trier dans l'ordre de fréquence.
on négligera les goto et le test Vrai / faux lui même ( qui intègre un goto en réalité)
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = 4 * (t(a) + t(b) +t(c) +t(d))
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux)
"Patrice Henrio" a écrit dans le message de news: #Anf9sg#
Je vous remercie de vos précisions, y compris le rappel de la loi de
Morgan
sur le Et et le Ou. En fait le problème que je vais me décider à traiter un jour est de savoir si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action else if B then action else if C then action else if D then action end if enf if end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
écrit
dans le message de news: e2iSSSW% > Si t'as pas peur des goto, > alors il suffit de se rappeler que non(A ou B) = non(A) et non(B) > > d'où l'horible algo suivant: > > if not A then > if not B then goto YaPasAFaire > end if > ' > ' là ya à faire > ' > .... > ' > YaPasAFaire: > ' > ' suite du bignz > ' > > > > > "Patrice Henrio" a écrit dans le message de > news: #IGFhaM# >> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", >> Vb >> évalue A et B, même si c'est inutile puisque quelque soit la valeur >> booléenne de B, le résultat est True. >> >> Private Sub Command1_Click() >> Dim X As Integer >> Dim B As Boolean >> B = True Or ((1 / X) = 0) >> Debug.Print B >> End Sub >> >> Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" >> s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés > qu'on >> rencontre False ? >> >> > >
Tou dépendra de la fréquence de réponse vrai / faux aux tests a b c et d,
que tu auras intérêt à trier dans l'ordre de fréquence.
on négligera les goto et le test Vrai / faux lui même ( qui intègre un goto
en réalité)
Pour la première écriture, le temps celui d'évaluation des 4 valeurs
booleenes quoi qu'il arrive. soit
T = 4 * (t(a) + t(b) +t(c) +t(d))
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then
if non b then
if non c then
if non d then goto suite
end if
end if
end if
'
' cas traitement a ou b ou c ou d vrai
'
suite:
le temps d'evaluation sera
T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b
faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux)))
où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) >
freq(c faux) > freq(d faux)
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news: #Anf9sg#EHA.1564@TK2MSFTNGP09.phx.gbl...
Je vous remercie de vos précisions, y compris le rappel de la loi de
Morgan
sur le Et et le Ou.
En fait le problème que je vais me décider à traiter un jour est de savoir
si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action
else if B then action
else if C then action
else if D then action
end if
enf if
end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui
prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
écrit
dans le message de news: e2iSSSW%23EHA.3372@TK2MSFTNGP10.phx.gbl...
> Si t'as pas peur des goto,
> alors il suffit de se rappeler que non(A ou B) = non(A) et non(B)
>
> d'où l'horible algo suivant:
>
> if not A then
> if not B then goto YaPasAFaire
> end if
> '
> ' là ya à faire
> '
> ....
> '
> YaPasAFaire:
> '
> ' suite du bignz
> '
>
>
>
>
> "Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
> news: #IGFhaM#EHA.2568@TK2MSFTNGP11.phx.gbl...
>> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B",
>> Vb
>> évalue A et B, même si c'est inutile puisque quelque soit la valeur
>> booléenne de B, le résultat est True.
>>
>> Private Sub Command1_Click()
>> Dim X As Integer
>> Dim B As Boolean
>> B = True Or ((1 / X) = 0)
>> Debug.Print B
>> End Sub
>>
>> Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
>> s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
> qu'on
>> rencontre False ?
>>
>>
>
>
Tou dépendra de la fréquence de réponse vrai / faux aux tests a b c et d, que tu auras intérêt à trier dans l'ordre de fréquence.
on négligera les goto et le test Vrai / faux lui même ( qui intègre un goto en réalité)
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = 4 * (t(a) + t(b) +t(c) +t(d))
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux)
"Patrice Henrio" a écrit dans le message de news: #Anf9sg#
Je vous remercie de vos précisions, y compris le rappel de la loi de
Morgan
sur le Et et le Ou. En fait le problème que je vais me décider à traiter un jour est de savoir si :
A,B,C,D sont des booléens
If A ou B ou C ou D then Action
est plus rapide que
If A then action else if B then action else if C then action else if D then action end if enf if end if
Je précise que A,B,C,D sont les résultats de fonctions booléennes qui prennent déjà du temsp de calcul.
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
écrit
dans le message de news: e2iSSSW% > Si t'as pas peur des goto, > alors il suffit de se rappeler que non(A ou B) = non(A) et non(B) > > d'où l'horible algo suivant: > > if not A then > if not B then goto YaPasAFaire > end if > ' > ' là ya à faire > ' > .... > ' > YaPasAFaire: > ' > ' suite du bignz > ' > > > > > "Patrice Henrio" a écrit dans le message de > news: #IGFhaM# >> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", >> Vb >> évalue A et B, même si c'est inutile puisque quelque soit la valeur >> booléenne de B, le résultat est True. >> >> Private Sub Command1_Click() >> Dim X As Integer >> Dim B As Boolean >> B = True Or ((1 / X) = 0) >> Debug.Print B >> End Sub >> >> Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou" >> s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés > qu'on >> rencontre False ? >> >> > >
Thierry Bertrand
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une erreur bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux
Pour la première écriture, le temps celui d'évaluation des 4 valeurs
booleenes quoi qu'il arrive. soit
T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une erreur
bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then
if non b then
if non c then
if non d then goto suite
end if
end if
end if
'
' cas traitement a ou b ou c ou d vrai
'
suite:
le temps d'evaluation sera
T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b
faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux)))
où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) >
freq(c faux) > freq(d faux
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une erreur bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux
Patrice Henrio
Effectivement je n'avais pas pensé à faire tout simplement le calcul. Cela indique d'ailleurs que dans tous les cas la deuxième solution est meilleure puisque au pire on calcule les quatre valeurs.
et dans le cas des And on aura bien sûr
If A and B and C and D then
équivalent logique de
If A then if B then if C then if D then action
mais cette dernière expression est plus rapide
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit dans le message de news: %23MHHBKh%
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une erreur bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux
Effectivement je n'avais pas pensé à faire tout simplement le calcul.
Cela indique d'ailleurs que dans tous les cas la deuxième solution est
meilleure puisque au pire on calcule les quatre valeurs.
et dans le cas des And on aura bien sûr
If A and B and C and D then
équivalent logique de
If A then if B then if C then if D then action
mais cette dernière expression est plus rapide
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit
dans le message de news: %23MHHBKh%23EHA.2568@TK2MSFTNGP11.phx.gbl...
Pour la première écriture, le temps celui d'évaluation des 4 valeurs
booleenes quoi qu'il arrive. soit
T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une
erreur
bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then
if non b then
if non c then
if non d then goto suite
end if
end if
end if
'
' cas traitement a ou b ou c ou d vrai
'
suite:
le temps d'evaluation sera
T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b
faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux)))
où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) >
freq(c faux) > freq(d faux
Effectivement je n'avais pas pensé à faire tout simplement le calcul. Cela indique d'ailleurs que dans tous les cas la deuxième solution est meilleure puisque au pire on calcule les quatre valeurs.
et dans le cas des And on aura bien sûr
If A and B and C and D then
équivalent logique de
If A then if B then if C then if D then action
mais cette dernière expression est plus rapide
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a écrit dans le message de news: %23MHHBKh%
Pour la première écriture, le temps celui d'évaluation des 4 valeurs booleenes quoi qu'il arrive. soit T = (t(a) + t(b) +t(c) +t(d)) <- j'avais mis 4 * et c'était une erreur bien sûr ...
t(i) temps de calcul des valeurs a b c d
Dans le cas
if non a then if non b then if non c then if non d then goto suite end if end if end if ' ' cas traitement a ou b ou c ou d vrai ' suite:
le temps d'evaluation sera T = t(a) + t(b) (1 - freq(a faux)) + t(c) ((1 - freq(a faux)) ( 1 - freq(b faux))) + t(d) ( 1 - freq(a faux))(1-freq(b faux))(1-freq(c faux))) où freq est la fréquence.
Pour gagner le plus de temps il faut que freq(a faux) > freq b(faux) > freq(c faux) > freq(d faux