"Sternenhimmel" auf den neuesten Stand bringen

There are 611 replies in this Thread which has previously been viewed 76,683 times. The latest Post (September 28, 2024 at 6:02 AM) was by BIF.

  • Grundsätzlich kann man die Fehlermeldung bei den Berechnungen abschalten.
    Und so einen Programmabsturz vermeiden.
    Schönen Gruß.

  • Geteilt durch cos(h). cos(h) sollte also nicht Null sein. h=arccos(0) =1/2pi.

    Dann käme ?division by zero. Tut es aber nicht, sondern ?illegal quantity.

    Grundsätzlich kann man die Fehlermeldung bei den Berechnungen abschalten.

    Äußerst elegant! :schreck!:

    Arndt

    GoDot C64 Image Processing
    Please login to see this link. - Please login to see this link. - Please login to see this link.
    Please login to see this link. - Please login to see this link. - Please login to see this link.

  • Ich habe noch einen anderen (peinlichen) Fehler entdeckt (sprechen wir nicht drüber...) Bitte updaten!

    Die Zeile, die den Absturz verursacht, berechnet den Azimuth eines Objekts. Der Wert darf nur zwischen -1 und +1 (also ausschließlich dieser Werte) liegen. Wodurch die Begrenzungen verletzt werden, habe ich noch nicht herausgefunden. Da ich kein Mathe-Freak bin, kann das auch dauern...

    Arndt

    die Funktion ac bringt das Ergebnis 1

    Please login to see this attachment.

    wenn das Ergbnis zwischen -1 und +1 liegen soll, dann wäre das Ergebnis OK!

    edit: besser genau lesen --> "also ausschließlich dieser Werte"

    ist das Ergnis nicht OK!


    hier sind noch alle Einzelwerte:

    Please login to see this attachment.Please login to see this attachment.

  • In Zeile 40250 wird die Funktion ac(x) definiert

    40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))

    und berechnet in Zeile 180

    180 a=fnac((sin(de)-sb*sin(h))/(cb*cos(h))):ifsw<pithena=-a


    Sternenhimmel habe ich als pdf und in Text mal unten angefügt.

  • Laut C64-Wiki

    Please login to see this link.

    " ... ?ILLEGAL QUANTITY ERROR beendet den Programmlauf, wenn ein Eingabeparameter einer Funktionen keinen gültigen Wert aufweist)."

    wobei der Fehler wohl in Zeile 40250 entsteht.

    Please login to see this attachment.

  • So ich hab's mal durchgerechnet

    180 a=fnac((sin(de)-sb*sin(h))/(cb*cos(h)))


    Sin(de) = sin (1.11177473) = 0.896486428824

    Sin(h) = sin (1.35961149) = 0.977783237324

    Sb*sin(h) = 0.783693457 * 0.977783237324

    = 0.766282325455

    Sin(de)-sb*sin(h) = 0.896486428824 - 0.766282325455

    = 0.130204103369

    Cos(h) = cos(1.35961149) = 0.209618560267

    Cb*cos(h) = 0.62114778 * 0.209618560267

    = 0.130204104849


    (sin(de)-sb*sin(h))/(cb*cos(h)) = 0.130204103369 / 0.130204104849

    = 0.999999988633


    40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))

    Den Wert 0.999999988633 hier eingesetzt gibt:

    Pi/2-atn(0.999999988633/sqr(1-0.999999988633*0.999999988633))=

    = 0.0015077799

    Somit ist a = 0.0015077799

    Scheint ein Rundungsproblem zu sein! 8\|


    (Hoffentlich hab ich mich hier nicht verrechnet!) :search:

  • Danke an Popeye für die große Mühe mit den Berechnungen! Läuft das darauf hinaus, dass die Floating-Point-Routinen unseres C64 hier mal wieder gezeigt haben, dass sie bisweilen ziemlich ungenau sein können?

    Arndt

    GoDot C64 Image Processing
    Please login to see this link. - Please login to see this link. - Please login to see this link.
    Please login to see this link. - Please login to see this link. - Please login to see this link.

  • Soweit ich das sehe und die Werte nach dem Fehlerabbruch händisch ausrechnen lasse, kommt am Ende auch die "1" raus.

    Please login to see this attachment.

    Scheint soweit schon zu funktionieren mit der Berechnung.

  • Soweit ich das sehe und die Werte nach dem Fehlerabbruch händisch ausrechnen lasse, kommt am Ende auch die "1" raus.

    Please login to see this attachment.

    Scheint soweit schon zu funktionieren mit der Berechnung.

    Leider ist die "1" und die "-1" nicht gewünscht!

    Die "1" wird als x in

    40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))

    eingesetzt was zu 1 durch NULL führt!

    Also zum Fehler!

  • Da die Funktion fnac sowieso nur 1 einziges Mal im Programm benutzt wird (Zeile 180) schlage ich Folgendes vor.

    Zeile

    40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))

    löschen

    Zeile 180 ändern zu

    180 a=(sin(de)-sb*sin(h))/(cb*cos(h)))

    Zeilen hinzufügen

    181 if a>0.99999 then a=0.99999 /// rem zeile editiert

    182 if a<-0.99999 then a=-0.99999 /// rem zeile editiert

    183 a=pi/2-atn(a/sqr(1-a*a)) : ifsw<pithena=-a

    die genaue Anzahl der Nachkommastellen kann ja noch ermittelt werden.

    Ich habe das ganze jetzt noch nicht getestet. Komme frühestens heute Abend dazu.

  • eingesetzt was zu 1 durch NULL führt!

    Also zum Fehler!

    Dann wäre aber die Fehlermeldung "Division durch Null".

    Please login to see this attachment.


    Laut C64-Wiki

    Please login to see this link.

    " ... ?ILLEGAL QUANTITY ERROR beendet den Programmlauf, wenn ein Eingabeparameter einer Funktionen keinen gültigen Wert aufweist)."

    wobei der Fehler wohl in Zeile 40250 entsteht.

    Please login to see this attachment.

  • Hier muss ich leider Korinthen kacken: Eine Division durch Null wirft immer den "Division by zero"-Fehler aus. Die kann nie ausgeführt werden, auch in einer Funktion nicht.

    Please login to see this attachment.

  • Snoopy erst Mal muss ich Dir Recht geben! :schreck!:

    Please login to see this attachment.Please login to see this attachment.

    Sowohl mit C64-ROM als auch mit TSB-ROM.

    Scheint wieder ein Problem der Rundung zu sein! :prof:

    Please login to see this attachment.Please login to see this attachment.

    Der erlaubte Wertebereich ist ja bei: -1<x<1


    sollte beides mit meinem Vorschlag im Post#572 abgefangen werden können. :prof:

  • Neun Stellen! .999999999 funktioniert noch und liefert bis .9999999995 immer den gleichen Wert. Ab .9999999996 wirft TSB ?division by zero raus.

    Arndt

    GoDot C64 Image Processing
    Please login to see this link. - Please login to see this link. - Please login to see this link.
    Please login to see this link. - Please login to see this link. - Please login to see this link.

  • Das gleiche Problem wie bei der Funktion ac könnte auch in der Funktion as vorkommen!

    40240 deffnas(x)=atn(x/sqr(1-x*x))

    40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))

    Eventuell sollte das auch abgefangen werden.

  • Neun Stellen! .999999999 funktioniert noch und liefert bis .9999999995 immer den gleichen Wert. Ab .9999999996 wirft TSB ?division by zero raus.

    Arndt

    Die "5" an der neunten Stelle wird vermutlich noch abgerundet während die "6" aufgerundet wird,

    was dann ja die böse 1 ergibt, die zu 1 durch NULL führt. :grab1:

  • 40250 deffnac(x)=pi/2-atn(x/sqr(1-x*x))


    Eventuell sollte das auch abgefangen werden.

    Warten wir's mal ab... :wink:

    Neue Version (mit Popeye s Änderungsvorschlägen) ist online. Kein Absturz mehr am 24.10.2023 um 1:00 Uhr! :wink:

    Arndt

    GoDot C64 Image Processing
    Please login to see this link. - Please login to see this link. - Please login to see this link.
    Please login to see this link. - Please login to see this link. - Please login to see this link.