Laden...

Komplexe Formel in C# formulieren

Erstellt von SlyFox vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.565 Views
S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren
Komplexe Formel in C# formulieren

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

49.485 Beiträge seit 2005
vor 13 Jahren

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

3.971 Beiträge seit 2006
vor 13 Jahren

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...

C
401 Beiträge seit 2007
vor 13 Jahren

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.

U
282 Beiträge seit 2008
vor 13 Jahren

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.

S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren

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