Bug im Zusammenhang mit Global Dim Array?
Verfasst: 13.07.2006 09:44
Hallo zusammen!
Ich hatte (bisher...
) ein gut funktionierendes Programm mit selbstgeschriebenen 3D-Abbildungen (reichlich Gebrauch von Sin/Cos).
Sin/Cos hab ich daher in ein Array von 0-90 (oder in der primitiven, aber schnelleren Version von 0-360) oder so geschrieben und je nach Winkel, den ich will (wird an Proc NSin übergeben) wird der jeweilige Wert ausgeben (eventuell um Vorzeichen korrigiert bei der "verfeinerten", die aber langsamer ist....).
Da ich mit Ganzzahlen rechne, habe ich kurzerhand einen um x größeren Wert, als den tatsächlichen Sin-Wert in das Array gespeichert. x ist auch tatsächlich eine Variable (oder vielmehr Konstante, da sie nicht mehr während der Laufzeit geändert wird) und ist der Genauigkeit wegen auf einem Wert von 300 (100 bewirkte zu große Sprünge bei der Abbildung).
Der Typ der einzelnen Array-Elemente war bisher .w (-32000 bis 32000 reicht dicke für jeden denkbaren Faktor...)
Jetzt kommts:
Seit ich das Programm auf PB4 umgeschrieben habe, funktioniert es nicht mehr! Als ich neu anfing, ist mir aufgefallen, daß Sin/Cos irgendwie seltsame Werte enthielten! Nach einem Wert von 120 steht in dem Array eine -120 (in etwa...).
Habe mir das Problem auch mit for a=0 to 360 : plot (a,nsin(a)) : next a anzeigen lassen.
So als ob man den Graph der Sin-Cos-Schwingungen (vertikal) mit einem Faktor multipliziert und alles, was dann oben übersteht (über 128) unten wieder anfügt!
Kann es sein, daß bei Global Arrays der Typ irgendwie ignoriert wird? Oder ist .w nicht mehr 2 byte groß und von -32000 bis 32000?
Oder ist das ein Zugriffsfehler auf Global Arrays?
Das Beste ist noch: wenn ich das Ergebnis von array(a)=sin(a*f)*x durch 3 teile, stimmt wieder alles, nur daß die werte um faktor 3 zu klein sind, aber der Fehler des "zu große Werte=wieder ganz kleine" ist dadurch weg; nur will ich große Werte speichern/korrekt drauf zugreifen!
PS: unter PB 3.94 lief es so!
Ich hatte (bisher...

Sin/Cos hab ich daher in ein Array von 0-90 (oder in der primitiven, aber schnelleren Version von 0-360) oder so geschrieben und je nach Winkel, den ich will (wird an Proc NSin übergeben) wird der jeweilige Wert ausgeben (eventuell um Vorzeichen korrigiert bei der "verfeinerten", die aber langsamer ist....).
Da ich mit Ganzzahlen rechne, habe ich kurzerhand einen um x größeren Wert, als den tatsächlichen Sin-Wert in das Array gespeichert. x ist auch tatsächlich eine Variable (oder vielmehr Konstante, da sie nicht mehr während der Laufzeit geändert wird) und ist der Genauigkeit wegen auf einem Wert von 300 (100 bewirkte zu große Sprünge bei der Abbildung).
Der Typ der einzelnen Array-Elemente war bisher .w (-32000 bis 32000 reicht dicke für jeden denkbaren Faktor...)
Jetzt kommts:
Seit ich das Programm auf PB4 umgeschrieben habe, funktioniert es nicht mehr! Als ich neu anfing, ist mir aufgefallen, daß Sin/Cos irgendwie seltsame Werte enthielten! Nach einem Wert von 120 steht in dem Array eine -120 (in etwa...).
Habe mir das Problem auch mit for a=0 to 360 : plot (a,nsin(a)) : next a anzeigen lassen.
So als ob man den Graph der Sin-Cos-Schwingungen (vertikal) mit einem Faktor multipliziert und alles, was dann oben übersteht (über 128) unten wieder anfügt!
Kann es sein, daß bei Global Arrays der Typ irgendwie ignoriert wird? Oder ist .w nicht mehr 2 byte groß und von -32000 bis 32000?
Oder ist das ein Zugriffsfehler auf Global Arrays?
Das Beste ist noch: wenn ich das Ergebnis von array(a)=sin(a*f)*x durch 3 teile, stimmt wieder alles, nur daß die werte um faktor 3 zu klein sind, aber der Fehler des "zu große Werte=wieder ganz kleine" ist dadurch weg; nur will ich große Werte speichern/korrekt drauf zugreifen!
PS: unter PB 3.94 lief es so!