If-Vergleich - was ist schneller

OP #2490186
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
#2490204
Die Chancen stehen übrigens nicht schlecht, dass du mit der weniger 
eleganten Version if(l_cnt|l_ovl) besser fährst als mit den beiden 
Varianten oben (unter der Annahme, dass die Vars vorzeichenlos sind, 
andernfalls wären deine Varianten nicht äquivalent).
#2490213
Ich würde erwarten, daß beide gleich schnell sind. Es ist recht 
wahrscheinlich, daß der generierte Code exakt gleich ist.

Sebastian L. schrieb:
> Ich stelle mir die Frage deshalb, weil im ersten Beispiel
> ein exakter-, im zweiten ein "range"-Vergleich (">") gemacht wird.

Und? Ich kenne jetzt den Prozessor nicht, aber warum sollten die 
unterschiedlich schnell sein?
OP #2490228
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.