-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
31. Jan 2010
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...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
Ein hoch auf "lesbaren und kommentarlosen Code"! Wenn man den schlimmen Bug aus #64 beseitigt hat, kommt der "lesbaren und kommentarlosen Code" doch tatsächlich zu dem Ergebnis, das x^2 - 3x + 2 = 0 die Lösungen hat x1=3, x2=0.666666666666667!
Na denn gute Nacht!
Gammatester
Hinweis: die Lösungen sind x1=1 und x2=2.
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
QuadraticEquationSolver.pas(43): Invalid compiler directive: 'Region'
QuadraticEquationSolver.pas(89): Invalid compiler directive: 'EndRegion'
QuadraticEquationSolver.pas(91): Invalid compiler directive: 'Region'
QuadraticEquationSolver.pas(112): Invalid compiler directive: 'EndRegion'
QuadraticEquationSolver.pas(114): Invalid compiler directive: 'Region'
...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
Richtig, nicht jeder hat Mathe studiert. Aber dann sollte man sich vielleicht auch nicht so aus dem Fenster lehnen mit mathematisch bzw. numerisch unqualifizierten Vorschlägen. Im überigen bedeutet Mathestudium nicht unbedingt, daß man das numerische Problem lösen kann. Mathematisch ist eine quadratische Gleichung (fast) trivial.
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
Ist relativ schnell erklärt:
Man nehme die Doppelwurzel x1=x2=1, das gibt die quadratische Gleichung x^2 - 2x + 1 = 0, also a=1, b=-2, c=1. Jetzt wird x2 ein wenig gestört, also zB x2=1+e (e wie Epsilon). Das ergibt gibt dann a=1, b=-(2+e), c=1+e. Man kann für e jeden Wert einsetzen. Einen leicht sichtbare Effekt erhält man, wenn e = 1/10^n ist, oder was ich genommen habe e=2/10^n. Um schon...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
Und ich verstehe Deine Ignoranz nicht: Statt zu fragen, was 'Re' und 'Im' bedeutet, machst Du ein großes Theater. Das sind mathematische Bezeichnungen, die eigentlich schon auf dem Gymnasium bekannt sein sollten, spätestes im Studium, das auch nur ein wenig mit Mathe zu tun hat. Re = Realteil, Im = Imaginärteil.
Auch hier verkneife ich mir weitere Kommentare.
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
30. Jan 2010
Ja in der Tat. 're' und 'im' sind eingeführte mathematische Begriffe, 'offset' und 'basis' sind auch Standardbegriffe, die aber auch absolut gar nichts mit 're' und 'im' zu tun haben und hier völlig Fehl am Platz sind. Und 'w' und 'z' wären hier allemal besser als 'basis' bzw. 'offset', weil damit ziemlich offensichtlich wird, daß sie nur als temporäre Variable verwendet werden sollen.
Hier...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
29. Jan 2010
Testfälle kann man einfach selbstbasteln. Hier ein kleines Beispiel:
Mit a=10^n, b=-2*10^n+2, c=10^n+2, also zB a=1000, b=-2002, c=1002. Mit den Deinen Bezeichnungen sind die Lösungen X1=1, X2=1+2/10^n und die Diskriminante D=1/10^(2n), und dies sind die Rechenergebnisse (erste Spalte ist n):
1 X1=1,2 X2=0,999999999999999 D=0,0100000000000002
2 X1=1,02 ...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
29. Jan 2010
@alzaimar: Mit Deinem Vorschlag wären wir wieder am Asugangspunkt. Zwar verständlicher und hübscher, aber keinen Deut besser. Wenn nur die pq-Formel gut umgesetzt werden soll in mathematisch exakte Programmierung, trifft jfheins' Argument aus #19 wieder zu. Ich meine, daß ein Codelib-Beitrag doch mehr bringen sollte.
Dein Vorschlag ignoriert sämtliche angesprochen numerischen Probleme. Selbst...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
29. Jan 2010
Ein weiterer Bug und zwei Vorschläge:
Bug:
a=1, b=1e140, c=1
ergibt
X1= -2,14326739881213E123
X2= -1E140
a wird zwar erst richtig mit Vieta berechnet, dann aber im else-Zweig von 'p<0' überschrieben.
Vorschlag 1:
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
28. Jan 2010
Erster Fehlerbericht: Bug zB für: a=1 b=0 c=1. Mit der beigepackten EEX: -> Meldung "p is a very small nummber" dann "ungültige Gleitkomma-Op", in der D6-IDE x1=NAN x2=NAN.
Die "kleines p"-Logik ist noch ziemlich daneben, denn nach Ausgabe "p is a very small nummber" wird sqrt(0-1) berechnet -> Crash. Erste Abhilfe für den Fall oben: Ersetze if (p>=0) and (p<sqrt(Math.MinDouble)) then durch...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
27. Jan 2010
Wenn das alles implementiert ist, hat der Codelib-Beitrag einen großen Schritt in die richtige Richtung gemacht! :thumb:
Eine Sache würde ich allerdings noch ändern. Nach dem letzen Quellcode werden reelle und komplexe Lösungen sehr unterschiedlich behandelt wegen der Prüflogik für die Diskriminante d := b^2 - 4ac.
Wenn d>0 ist, gibt es 2 relle Lösungen. Wenn d<0 aber IsZero(d) (d.h. d...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
26. Jul 2009
Sterben wird daran schon niemand :wink: Allerdings kann ich mir nicht vorstellen, daß viele mit der Variante zufrieden sind. Ehrlich gesagt, habe ich sowas aus meiner Sicht Unsinniges schon lange nicht mehr gesehen. Hier mindestens fünf Gründe:
- Strings als Lösungen einer quadrischen Gleichung mit double-Koeffizienten sind einfach unsäglich (warum nicht gleich mit string-Koeffizienten, dann...
-
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by gammatester,
24. Jul 2009
Das ist keine saubere Lösung. Es wird zB nicht zurückgeliefert, wieviele Lösungen da sind.
mit x := SolveQuadraticEquation(1.0,2.0,1.0); ist x unbelegt (und da man das nicht mitgeteilt kriegt, kracht's oder es wird mit unsinngen Werte weiter gerechnet).
Es ist verständlich, wenn Du den komplexen Fall nicht betrachten willst. Allerdings ist doch der lineare Fall A=0 leicht zu behandeln und...