Seite 1 von 5

Probleme mit Doubles

Verfasst: 25.01.2013 23:19
von captain_hesse
Hallo zusammen
Ich arbeite z.Z an einem etwas größeren Projekt und zwar an einem Zeichenprogramm und habe folgendes Problem,
das Programm besteht zu ca. 95% aus Double Variablen und wenn ich es nun mit der 64 Bit Version von PB starte, sind alle Berechnungen die das Programm macht korrekt aber wenn ich es mit der 32 Bit Version starte bekomme ich teilweise andere bzw. falsche Ergebnisse zurück. Sollten die Doubles in beiden PB Versionen nicht exakt das selbe ergebnis liefern :-? ?
Mir ist auch aufgefallen das dieses Problem nicht von anfang an war sondern erst als das Programm größer wurde und eine größere Anzahl an Doubles erreicht wurde.
Mein Arbeitssystem steht unten in der Signatur.

Viele Grüße
Armin

Re: Probleme mit Doubles

Verfasst: 25.01.2013 23:22
von ts-soft
Entweder falsche strukturen oder falsche procedurerückgabetypen, die dies bewirken.
Oder Du castest irgendwo auf ein Integer statt auf einem Quad.

Re: Probleme mit Doubles

Verfasst: 25.01.2013 23:31
von captain_hesse
Hmmm die Proceduren verwenden eine globale Structure um miteinander zu kommunizieren

Code: Alles auswählen

Structure info
  type.l
  radius.d
  x1.d
  y1.d
  x2.d
  y2.d
  mitte_x.d
  mitte_y.d
  farbe.l
  k_start.d      ;winkel angabe
  k_ende.d       ;winkel angabe
EndStructure  

Global Dim element.info(#max_elemente)
aber was ist daran falsch ?

Re: Probleme mit Doubles

Verfasst: 25.01.2013 23:34
von ts-soft
Daran ist nichts falsch, jedenfalls hat diese Strukture keine Schuld. Aber um Dir helfen zu können, bräuchten wir schon
die Proceduren, die für das falsche Ergebnis verantwortlich sind. Welche das sind wirst Du wohl selber rausfinden können.
Alle Proceduren nacheinander in x64 und x32 aufrufen und sehen, welche Schuld hat und hier posten.

Ich hoffe mal, Du warst so klever und hast globale Variablen vermieden, ansonsten wird es schon etwas schwieriger.

Re: Probleme mit Doubles

Verfasst: 26.01.2013 00:05
von captain_hesse
ts-soft hat geschrieben:Ich hoffe mal, Du warst so klever und hast globale Variablen vermieden, ansonsten wird es schon etwas schwieriger.
Nicht ganz ein par globale sind schon drin und auch die structuren sind global. Was bewirken diese denn ?

Re: Probleme mit Doubles

Verfasst: 26.01.2013 00:06
von STARGÅTE
Was TS-Soft meint ist:
Du könntest irgendwo ein Ergebnis einer Double als Integer speichern, wobei die Zahl für Integer (wenn es eine Long ist) zu klein ist, dann würdest du beim wieder Umwandeln ein falsches Ergebnis bekommen, hier bei Beispiel:

Code: Alles auswählen

Double.d = 123.456e9
Debug Double
Integer = Int(Double/10) ; << Hier wurde vergessen es als Quad zu definieren
Double = Integer * 10
Debug Double ; Unter 32Bit falsch
64Bit hat geschrieben:123456000000.0
123456000000.0
32Bit hat geschrieben:123456000000.0
-5393018880.0

Re: Probleme mit Doubles

Verfasst: 26.01.2013 00:08
von ts-soft
>> Nicht ganz ein par globale sind schon drin und auch die structuren sind global. Was bewirken diese denn ?

Die bewirken, das wir deren richtigen Wert nicht unbedingt beurteilen können, da diese von allen Seiten verändert sein
könnten. Kommt halt drauf an, für was Du die eingesetzt hast, ob das sich jetzt erschwerend auswirkt.

Re: Probleme mit Doubles

Verfasst: 26.01.2013 00:38
von captain_hesse
ts-soft hat geschrieben:Die bewirken, das wir deren richtigen Wert nicht unbedingt beurteilen können, da diese von allen Seiten verändert sein
könnten. Kommt halt drauf an, für was Du die eingesetzt hast, ob das sich jetzt erschwerend auswirkt.
Das kann ich ausschließen, die globalen Variablen haben so gut wie nichts mit den Fehlberechnungen zu tun es sind nur einige wenige das ist überschaubar.
Es könnte aber möglich sein wie STARGÅTE geschrieben hat das ich irgendwo ein .d vergessen hab und einen Double Wert in eine long rein quetsche da der fehler ja nur in der 32 bit version vorkommt. Ich muß da nochmal drüber schauen ob ich was finden kann und melde mich dann wieder. Bis dahin aber schonmal vielen Dank euch beiden :allright:

Re: Probleme mit Doubles

Verfasst: 26.01.2013 00:47
von ts-soft
captain_hesse hat geschrieben:das ich irgendwo ein .d vergessen hab und einen Double Wert in eine long rein quetsche
Wenn Du EnableExplicit nutzt, sollte dies eigentlich kaum möglich sein :wink:

Einfach die Proceduren in einen leeren Source kopieren und dann mit 32 und 64 bit die Ergebnisse prüfen, dann
solltest Du den Schuldigen schon finden :wink:

Zum testen möglichst hohe Werte (> Long) verwenden.

Re: Probleme mit Doubles

Verfasst: 26.01.2013 01:21
von captain_hesse
ts-soft hat geschrieben:Wenn Du EnableExplicit nutzt, sollte dies eigentlich kaum möglich sein

Einfach die Proceduren in einen leeren Source kopieren und dann mit 32 und 64 bit die Ergebnisse prüfen, dann
solltest Du den Schuldigen schon finden

Zum testen möglichst hohe Werte (> Long) verwenden.
Ok werd ich so machen.
Au man das wird ne Lange Nacht nachträglich EnableExplicit einbauen das bedeutet Arbeit :freak: aber gottseidank haben wir ja Wochenende :) .