AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist schneller - NAN oder try Except

Ein Thema von bernau · begonnen am 18. Aug 2008 · letzter Beitrag vom 18. Aug 2008
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:01
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:11
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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:24
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.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#4

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:28
Ich würde es für elegant halten, dies direkt in "meineFunktion" auszuwerten...
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:33
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
Thomas
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 11:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Was ist schneller - NAN oder try Except

  Alt 18. Aug 2008, 13:38
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 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