Hallo,
ich habe bei Wikipedia eine Formel gefunden, die ich irgendwie nicht richtig in C# umgesetzt bekomme (zumindest sind meine Ergebnisse falsch).
Folgendes habe ich kodiert:
double d = 5000.0;
double x = 0.1;
double y = d * Math.Log(Math.Abs((d + Math.Sqrt(Math.Pow(d, 2) - Math.Pow(x, 2))) / x)) - Math.Sqrt(Math.Pow(d, 2) - Math.Pow(x, 2));
MessageBox.Show(y.ToString());
Was habe ich falsch gemacht?
Vielen Dank für eure Hilfe
Christoph
Hallo SlyFox,
selbst wenn eine Formel richtig umgesetzt wurde, gibt es in Computersystem immer das Problem mit der endlichen Genauigkeit und den daraus entstehenden Rundungsfehlern, die sich insbesondere bei Differenzialrechnungen zu extremen Größen aufschaukeln können.
Siehe auch [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler.
herbivore
Wenn es sich nicht nur um eine Formel handelt, kannst du die Berechnungen auch in ein F# Projekt auslagern. Dieses bietet im Vergleich zu C# mehr Möglichkeiten, bzw. dort sind diese einfacher und schneller umzusetzen. Einfach mal probieren.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Wenn es sich nicht nur um eine Formel handelt, kannst du die Berechnungen auch in ein F# Projekt auslagern. Dieses bietet im Vergleich zu C# mehr Möglichkeiten, bzw. dort sind diese einfacher und schneller umzusetzen. Einfach mal probieren.
Alerdings wird ihm das auch nichts bringen, wenn der Fehler aufgrund der Rundung auftritt.
Du berechnest
5000 * ln|(5000 + Sqrt(50002 - 0.12)) / 0.1| - Math.Sqrt(50002 - 0.12);
Die Zahlen haben große Unterschiede, 50002 und 0.12 Liegen um Größenordnungen 10^8 auseinander. Da wird es unweigerlich zu Rundungsfehlern kommen. Was willst du denn tun? Gibt es evtl. nuermisch stabilere Verfahren? Was meinst du mit "zumindest sind meine Ergebnisse falsch." Völlig falsch oder ungenau?
Ich habe aber das Gefühl, dass die Parameterform der Traktrix stabiler sein könnte.
Hallo,
vielen Dank erst mal für eure Einschätzung.
Wahrscheinlich ist es wirklich ein Rundungsfehler, der mir die Probleme bereitet.
Ich werde mal nach einer "computerfreundlicheren" Formel suchen.
Christoph