Autor Beitrag
ichfalk
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 21.01.05 16:23 
Hallo!

Was ist schneller?

ausblenden Delphi-Quelltext
1:
2:
3:
if (schnitt = 1
  then genauigkeit := 2;
else genauigkeit := 0;


ODER

ausblenden Delphi-Quelltext
1:
genauigkeit := 2 * schnitt;					


(schnitt kann nur 0 oder 1 sein...)

Falk.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
HolgerB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 91

Win XP
D6 Pers
BeitragVerfasst: Fr 21.01.05 16:34 
Hallo,
ich würde es so probieren:

ausblenden Delphi-Quelltext
1:
Genauikeit := shl(schnitt);					


Meines Wissens nach sind Bittverschiebungen eine der Schnellsten Rechenoperationen.
shl bewirkt *2
shr bewirkt div 2


Gruß
Holger
I.MacLeod
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 109



BeitragVerfasst: Fr 21.01.05 22:31 
Die korrekte Syntax dazu ist:

ausblenden Delphi-Quelltext
1:
genauigkeit := schnitt shl 1;					


Falls schnitt auch 2435 sein kann könntest du mal das hier versuchen:

ausblenden Delphi-Quelltext
1:
genauigkeit := byte(schnitt=1shl 1;					


Aber keine Garantie auf irgendeinen Geschwindigkeitsvorteil ;-)

IIRC optimiert Delphi *2^n aber auch automatisch mit shl.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 21.01.05 23:00 
also ich habs mal getestet


beide lokal:

aus genauigkeit := 2*schnitt
macht delphi nen

ausblenden Delphi-Quelltext
1:
2:
mov ebx, eax
add ebx, eax


das sehr schnell

aus genauigkeit := schnitt shl 1 macht delphi das selbe (also genau gleich schnell)

aus der if abfrage macht delphi was längeres (nicht schnell)

wenn man globale variablen benutzt (delphi greift dan auf den speicher zu und nimmt nicht die variablen als register)

ist:

genauigkeit := 2*schnitt bzw. genauigkeit shl 1 eigentlich genau so schnell wie

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
asm
  mov eax, [schnitt]
  shl eax, 1
  mov [genauigkeit], eax
end;



was etwas das selbe ist

also die if abfrage ist langsamer :P

Moderiert von user profile iconChristian S.: Delphi- bzw. Code-Tags korrigiert