Skip to Content.
Sympa Menu

cacert-de - Performance - Re: AW: nur noch wenige aktive Assurer

Subject: Deutschsprachige CAcert Support Liste

List archive

Performance - Re: AW: nur noch wenige aktive Assurer


Chronological Thread 
  • From: Thomas Bremer <thomas.bremer AT cacert.org>
  • To: cacert-de AT lists.cacert.org
  • Subject: Performance - Re: AW: nur noch wenige aktive Assurer
  • Date: Thu, 17 Sep 2009 16:39:04 +0200
  • Authentication-results: lists.cacert.org; dkim=pass (1024-bit key) header.i= AT cacert.org; dkim-asp=none

Hi Uli,
diese Mail ist ein bisschen off topic. Okay, habe den Betreff geändert.
  $maxdist = 50;       // i.e. 50 km
  $locid = 715191;        // Hamburg   i.e. Location des Assuree
  $query = "select * from `locations` where `id`='$locid'";
  $loc = mysql_fetch_assoc(mysql_query($query));
  $query = "SELECT ROUND(6378.137 * ACOS(0.9999999*((SIN(PI() * $loc[lat]
/ 180) * SIN(PI()
...
den größten Teil der wilden Formel habe ich mal abgeschnitten. Da wird die Großkreisentfernung berechnet. Ich halte das für Overkill, zumal Assurees normalerweise eine andere Route nehmen. (Wer hat schon ein Flugzeug mit eingebauter Windstille? ;-) ) Eine Näherung würde hier auch reichen. Und weil im Formular auf der Seite $maxdist <= 1000 ist, geht das auch ziemlich einfach. Die "spezifische Entfernung" zwischen unterschiedlichen Breiten auf einem Meridian ist (40,000 / 360) km/deg. Auf einem Breitenkreis, also zwischen zwei Punkten gleicher Breite, ist sie (40,000 / 360 * cos(lat)) km / deg. Jetzt nehmen wir als Breite die von $locid tun wir so, als wären wir in der Ebene und benutzen den guten alten Pythagoras und kriegen eine Näherung für die Entfernung. Und wenn wir die Sache noch etwas beschleunigen wollen, dann quadrieren wir die Ungleichung. Damit ersparen wir uns die Wurzel.

Was bringt das an Effizienz? Nun ja, von den 5 * Count_Assurer trigonometrischen Operationen bleibt noch eine übrig. Die Multiplikationen zähle ich erstmal nicht, sie sind aber normalerweise wesentlich schneller als sin / cos / acos, auch wenn sie in Hardware mit CORDIC gerechnet werden. Brauchen wir das? Ich habe eben mal probeweise Reykjavík (1561244) als Ort eingegeben und mit 10 km und 1000 km als Limit gesucht. Hat mehrere Sekunden gedauert. Frankfurt (606058) dauert auch so lange - jedenfalls bei 10 km. Andere können das wesentlich besser.

regards, Thomas



Archive powered by MHonArc 2.6.16.

Top of Page