Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Komplexe Formel in C# formulieren
SlyFox
myCSharp.de - Member



Dabei seit:
Beiträge: 231
Herkunft: Köln

Themenstarter:

Komplexe Formel in C# formulieren

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Corpsegrinder
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Zitat von kleines_eichhoernchen
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.
private Nachricht | Beiträge des Benutzers
Uwe81
myCSharp.de - Member



Dabei seit:
Beiträge: 282
Herkunft: Ludwigshafen

beantworten | zitieren | melden

Du berechnest

5000 * ln|(5000 + Sqrt(5000^2 - 0.1^2)) / 0.1| - Math.Sqrt(5000^2 - 0.1^2);

Die Zahlen haben große Unterschiede, 5000^2 und 0.1^2 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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Uwe81 am .
private Nachricht | Beiträge des Benutzers
SlyFox
myCSharp.de - Member



Dabei seit:
Beiträge: 231
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers