Hallo Ihr Spezialisten,
ich habe ein relativ umfangreiches Programm mit recht viel Mathematik geschrieben. Das bringt zu meiner Überraschung in einem Fall von vielen, die einwandfrei laufen, da wo im Ergebnis eine Double-Zahl erwartet wird, die Ausgabe -1.#IND . Ich habe keine Ahnung, was das bedeutet, habe auch bisher nichts dazu gefunden.
Ich habe versucht, dem Problem auf den Grund zu gehen. Das scheint im Zusammenhang zu stehen mit Zwischenwerten die statt mit einer Double-Zahl mit NaN angegeben werden. Ich habe versucht, herauszufinden, wann das zum ersten Mal geschieht, indem ich Ausgabefiles durchgesucht habe und festgestellt, dass es ungefähr an einer Stelle passiert, die durch einen Arrayindex 1212 gekennzeichnet ist.
Ich habe dann mit einer Msgbox den Verlauf des Problems verfolgt. Hier ein kleiner Codeausschnitt:
For n = 0 To npmax
i_punkt = punkt(n, 0) - punkt(0, 0)
j_punkt = punkt(n, 1) - punkt(0, 1)
abst(n) = ipe * j_punkt - jpe * i_punkt
If ilp + n = 1208 Then Stop
MsgBox(CStr(ilp + n) & " " & Format(abst(n), "0.000"))
Next
Die Msgbox ist auskommentiert bis die Stopanweisung eintritt. Dann wird das Kommentar-Apostroph entfernt und die Msgbox zeigt die Werte an. Alle ...punkt-Variablen sind Doublewerte im Bereich von -100 bis +100. Entsprechend auch abst, dessen Wert in der Msgbox ausgegeben wird. Und da werden für die Indizes (ilp + n) von 1209 bis 1216 ganz vernünftige Werte ausgegeben. Bei Index 1217 kommt als Wert 0.000, was richtig ist, wie man aus der Zeile für die Zuweisung von abst errechnen kann. Doch wenn man die Msgbox mit OK beantwortet, kommt der Index 1217 noch einmal in der Msgbox, wird also nicht weitergezählt. Und dann erscheint für abst der Ausgabewert NaN.
Kann mir das jemand erklären, wieso die gleiche Programmzeile zweimal unmittelbar nacheinander aufgerufen wird? Denn die Schleife ist ja nicht gelaufen, sonst wäre der nächst höhere Index angezeigt worden. Und was bedeutet es, wenn die Msgbox zuerst einen vernünftigen Wert, dann aber gleich noch einmal als Wert NaN ausgibt?
Ich hatte zuerst einen Hardwarefehler vermutet, aber auf einem anderen Rechner läuft es genauso.
Für mich ist das ganze rätselhaft, aber vielleicht kennt das ja jemand.
ich habe ein relativ umfangreiches Programm mit recht viel Mathematik geschrieben. Das bringt zu meiner Überraschung in einem Fall von vielen, die einwandfrei laufen, da wo im Ergebnis eine Double-Zahl erwartet wird, die Ausgabe -1.#IND . Ich habe keine Ahnung, was das bedeutet, habe auch bisher nichts dazu gefunden.
Ich habe versucht, dem Problem auf den Grund zu gehen. Das scheint im Zusammenhang zu stehen mit Zwischenwerten die statt mit einer Double-Zahl mit NaN angegeben werden. Ich habe versucht, herauszufinden, wann das zum ersten Mal geschieht, indem ich Ausgabefiles durchgesucht habe und festgestellt, dass es ungefähr an einer Stelle passiert, die durch einen Arrayindex 1212 gekennzeichnet ist.
Ich habe dann mit einer Msgbox den Verlauf des Problems verfolgt. Hier ein kleiner Codeausschnitt:
For n = 0 To npmax
i_punkt = punkt(n, 0) - punkt(0, 0)
j_punkt = punkt(n, 1) - punkt(0, 1)
abst(n) = ipe * j_punkt - jpe * i_punkt
If ilp + n = 1208 Then Stop
MsgBox(CStr(ilp + n) & " " & Format(abst(n), "0.000"))
Next
Die Msgbox ist auskommentiert bis die Stopanweisung eintritt. Dann wird das Kommentar-Apostroph entfernt und die Msgbox zeigt die Werte an. Alle ...punkt-Variablen sind Doublewerte im Bereich von -100 bis +100. Entsprechend auch abst, dessen Wert in der Msgbox ausgegeben wird. Und da werden für die Indizes (ilp + n) von 1209 bis 1216 ganz vernünftige Werte ausgegeben. Bei Index 1217 kommt als Wert 0.000, was richtig ist, wie man aus der Zeile für die Zuweisung von abst errechnen kann. Doch wenn man die Msgbox mit OK beantwortet, kommt der Index 1217 noch einmal in der Msgbox, wird also nicht weitergezählt. Und dann erscheint für abst der Ausgabewert NaN.
Kann mir das jemand erklären, wieso die gleiche Programmzeile zweimal unmittelbar nacheinander aufgerufen wird? Denn die Schleife ist ja nicht gelaufen, sonst wäre der nächst höhere Index angezeigt worden. Und was bedeutet es, wenn die Msgbox zuerst einen vernünftigen Wert, dann aber gleich noch einmal als Wert NaN ausgibt?
Ich hatte zuerst einen Hardwarefehler vermutet, aber auf einem anderen Rechner läuft es genauso.
Für mich ist das ganze rätselhaft, aber vielleicht kennt das ja jemand.