If-Vergleich - was ist schneller

OP #2490186
Lesenswert?

Hallo zusammen,

ich programmiere auf einen Fujitsu 16FX (16 bit) und habe eine (kleine) 
grundsätzliche Frage - welche der beiden folgenden Vergleiche ist 
schneller ? Ich stelle mir die Frage deshalb, weil im ersten Beispiel 
ein exakter-, im zweiten ein "range"-Vergleich (">") gemacht wird. Der 
erste ist aufgrund der else-Bedingung (genau die brauche ich) unschöner, 
könnte mir aber vorstellen, dass die schneller ist !?
1
if ((l_cnt==0) && (l_ovl==0)) {
2
  // nix machen, der Timer ist abgelaufen
3
} else {
4
  // mach was, der Timer ist noch nicht abgelaufen
5
  [....]
6
}
1
if ((l_cnt>0) || (l_ovl>0)) {
2
  // mach was, der Timer ist noch nicht abgelaufen
3
  [....]
4
}

Danke,
Sebastian
OP #2490228
Lesenswert?

Hallo zusammen,

interessantes Thema offensichtlich. Wahrscheinlich nützt wirklich nur 
der Blick in das übersetzte Programm - mache ich kommende Woche mal.

Warum ich auf die Idee gekommen bin, dass ein Range-Vergleich langsamer 
sein könnte ? Auch wenn es nicht wirklich vergleichbar ist (ja, ich 
weiss ;-) - bei MySQL (Datenbankserver) ist es so - da werden allerdings 
nicht unmittelbar Variabeln vergleichen, sondern Datensätze.

Grüße,
Sebastian
#2490239
Lesenswert?

Es gibt gibt tatsächlich Situationen, in denen < aufwendiger ist als ==, 
und zwar bei Werten mit Vorzeichen und nicht ausgerechnet mit 0. Manche 
Architekturen besitzen die dafür nötigen Vergleichsoperationen oder 
Sprungbedingungen nicht (z.B. 8051).

Dein SQL Vergleich hinkt nicht mehr, der kriecht nur noch.
Persönliche Seite #2490240
Lesenswert?

A. K. schrieb:
> Die Chancen stehen übrigens nicht schlecht, dass du mit der weniger
> eleganten Version if(l_cnt|l_ovl) besser fährst

Ist aber nicht gleichbedeutend mit if (l_cnt || l_ovl), zumindest wennes 
um C/C++ geht: Falls l_ovl volatile ist, darf es nur ausgewertet werden, 
wenn l_cnt false ist. Für l_cnt | l_ovl ist das anders, hier muss l_ovl 
immer ausgewertet werden, damit die durch volatile angezeigten 
Seiteneffekte zustande kommen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren