Undefiniertes Ergebniss einer Gleichung

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Undefiniertes Ergebniss einer Gleichung

    Hallo Vb-Paradise-User,

    Ich bin gerade dabei ein Programm zu schreiben welches im Wesentlichen eine Gleichung Löst, und das für verschiedene Werte.

    Alle Variablen sind > 0 und im Format Double angelegt, Wird die Funktion berechnet, kommt der Wert 1.#IND für SUM1 raus, welcher als > 1 behandelt wird und somit den Rest meines Proggs beeinflusst, hat jemand ne ahnung woran dies liegen Könnte ?

    Danke im Vorraus

    MFG sogen

    :pinch:

    VB.NET-Quellcode

    1. SUM1 = ((Omega / (Abs((x - TX1)) + Abs((y - TY1)) ^ Varf)) + ((1 - Omega) * (VarB ^ (Varg - Varf))) / ((2 * VarB) - (Abs((x - TX1)) + Abs((y - TY1))) ^ (Varg)))
    Double sollte vollkommen reichen.
    Ich denke, Du hast nicht alle Variablen vorbelegt, und dann sind die automatisch Null.
    Da kann es schon passieren, dass eine Division durch Null vorkommt, und Gleitkomma-Fehler werden i.A. nicht abgefangen.
    Sinnvoll wäre es noch, wenn Du die Gleichung auf mehrere Codezeilen verteilst, nann kannst Du im Einzelschrittbetrieb ds ganze besser verfolgen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo, und danke erstmal für die schnellen Antworten,

    In der Formel kommt es nicht zu einer division durch Null, ich hab mal einen Breakpoint auf die Zeile danach gesetzt und die Werte zur händischen Berechnung mit nem Taschenrechner Genommen, beim Taschenrechner ist 0,2 rausgekommen, in der Formel jedoch das -1#IND; Ich habe diesen "Wert" bisher noch nie verwendet, geschweigedenn von ihm gehört. Kann mir jemand dies genauer erklären ?



    @RodFromGermany --> ich werde jetzt die Formel mal aufteilen, melde mich aber auf jeden fall nochmal und gebe Feedback ;)



    Danke !!! sogen
    Hi
    -1#IND ist das Resultat von 0.0/0.0. Da eine Division mit 0 für alle Werte ungleich 0 unendlich * sgn(zähler) * sgn(nenner) gibt. Das ist so festgelegt und durch die Ungenauigkeit bei Werten < Double.Epsilon (2^-1074) von Double bedingt.
    Somit muss
    - Omega 0 oder 1 oder für VarB > 1 Varg-Varf klein bzw. für VarB < 1 Varg-Varf groß
    - der Nenner von einem der beiden Brüche 0 sein. Da gibt es aber zu viele Fälle, als dass ich sie alle nennen will.

    Kannst du die Werte der Variablen mal reinschreiben?

    Gruß
    ~blaze~