Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#71

Re: [Tutorial] Quadratische Gleichungen vollständig lösen

  Alt 31. Jan 2010, 11:49
Zum alzaimar-Code - ein Vorschlag und drei Bugs:

V: Wenn man schon für die einmalige Abfrage (abs(n) > sqrt(Math.MaxDouble)) eine eigene Funktion spendiert: IsAPositiveAndVeryLargeNumber sollte dann doch besser IsAVeryLargeNumber heißen, da ja abs(n) getestet wird. (Wieso eigentlich 'n'?)

B1: Außerdem ist die sqrt(MaxDouble)-Logik noch nicht richtig implementiert. Mit s=sqrt(MaxDouble) hat x^2 +s + s^2 = 0, d.h. a=1, b=s, c=s^2, angeblich 2 relle Lösungen, leider allerdings beide =NAN in der IDE, Exception außerhalb. Tatsächlich gibt es, wie man leicht nachrechnet, zwei konjugiert komplexe Lösungen x1,x2 = 0.5*(1 +/- sqrt(3)*i)*s.

B2: Weiter hat x^2 - 1e160*x + 0 = 0 angeblich die Lösungen x1=x2=1e160, richtig ist x=1e160, x2=0.

B3: Und wiedermal das unsägliche iszero-Problem, das wir eigentlich schon ad acta gelegt hatten: Der Code weigert sich die Lösungen x1=1, x2=2 von (rx)^2 - 3r(r*x) + 2r^2 = 0 zu berechnen für abs(r) <= 1e-6.

Noch eine Bemerkung zu Daniels "Compiler-Direktiven wie $REGION, die für das eigentliche Problem völlig irrelevant sind." In dem Codelib-Beitrag bitte bitte entfernen, da sie ja offensichtlich irrelevant sind, aber zumindest bis Delphi 10 das Kompilieren verhindern.

Gruß Gammatester
  Mit Zitat antworten Zitat