Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was ist schneller - NAN oder try Except (https://www.delphipraxis.net/118941-ist-schneller-nan-oder-try-except.html)

bernau 18. Aug 2008 11:01


Was ist schneller - NAN oder try Except
 
Hi,


ich habe eine Routine, die eine float-Zahl auswertet.

Es kann (sehr selten) vorkommen, daß die übergebene Zal den wert "NAN" besitzt.

Wie soll ich das am besten abfangen


So
Delphi-Quellcode:
if not IsNan then
  result:=meineFunction(aZahl)
else
  result:=0;

oder so
Delphi-Quellcode:
try
  result:=meineFunction(aZahl);
except
  result:=0;
end;


Was ist schneller bzw. welcher Code ist eleganter?



Gerd

Sherlock 18. Aug 2008 11:11

Re: Was ist schneller - NAN oder try Except
 
Ich würde es für eleganter halten IsNan (scheint auch schneller zu sein, schau mal in der Unit Math nach) zu verwenden. Da das ganze ja sehr selten auftritt, sollte Geschwindigkeit eigentlich keine Rolle spielen.

Edit: Mit try...except sollte man IMHO sehr sparsam umgehen.

Sherlock

mirage228 18. Aug 2008 11:24

Re: Was ist schneller - NAN oder try Except
 
Also bei try..except muss ein sog. SEH-Block erzeugt werden, der immer etwas langsamer ist, als Code ohne eine solche Struktur. Wobei das ganze natürlich abhängig davon ist, wie schnell deine Funktion eig. überhaupt durchläuft bzw. wie oft diese aufgerufen wird.
Du kannst ja mal beides umsetzen und dann für ein paar tausend Aufrufe die Zeit messen, aber ich denke, dass die IsNAN variante schneller und (siehe auch vorherigen Post) hier wahrscheinlich geeigneter ist.

guidok 18. Aug 2008 11:28

Re: Was ist schneller - NAN oder try Except
 
Ich würde es für elegant halten, dies direkt in "meineFunktion" auszuwerten...

Codewalker 18. Aug 2008 11:33

Re: Was ist schneller - NAN oder try Except
 
IsNAN ist imho nur der Vergleich mit einer Konstante - und der ist mit Sicherheit schneller als nahezu jedes andere Konstrukt. Und wie Mirage228 schon geschrieben hat, sind try-except-Blöcke aufwändiger und langsamer

jbg 18. Aug 2008 11:39

Re: Was ist schneller - NAN oder try Except
 
Zitat:

Zitat von Codewalker
Und wie Mirage228 schon geschrieben hat, sind try-except-Blöcke aufwändiger und langsamer

Prinzipiell fügen die "nur" 8 Speicherzugriffe und einen Jump" hinzu. Was nur bei sehr kleinen Funktionen eine Auswirkung hat. Wird aber eine Exception ausgelöst, dann verschlingt das schon beachlich mehr CPU Zyklen. Das hat aber nichts mit try/except zu tun, sondern mit der Tatsache, dass die Exception ausgelöst wurde. Denn das try/except braucht auch im Exception-Fall nur seine 8 Speicherzugriffe und den Jump. Aber bis die Exception zum "except" gelangt, ist schon einiges an Zeit vergangen.

Darum müsste man eher sagen, eine Vorprüfung ist besser als eine ausgelöste Exception. Mit der Effizienz von try/except hat das recht wenig zu tun.

bernau 18. Aug 2008 13:38

Re: Was ist schneller - NAN oder try Except
 
Zitat:

Zitat von guidok
Ich würde es für elegant halten, dies direkt in "meineFunktion" auszuwerten...

Ist Richtig. Wollte ich auch so machen. Im Beispiel hatte ich mich vertippt. Es sollte "EineFunction" heissen und nicht "MeineFunction". Das ist aber nur Optik.

Letztendlich sehe ich, daß die Abfrage mit IsNan(aZahl) besser und schneller ist.

Danke an alle.


Gerd


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz