Problem mit LONG Werten... Bitte mal Code probieren...

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

rema

Betreff: Problem mit LONG Werten... Bitte mal Code probieren...

BeitragSo, Sep 11, 2005 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Local a:Long
Local i:Long

' LONG_MAX = 2^63-1

For i = 1 To 1000
   a = (2^63) - i
   Print i+"> "+ a
Next


Bekomme folgendes:

Bis i=512 immer den gleichen negativen Wert, und ab i=513 immer den gleichen positiven Wert.

Wobei aber LONG_MAX = 2^63-1 sein sollte.

Liegts an meinem 32-bit Rechner, oder ist dies ein Bug, oder mache ich sonstwie einen Gedankenfehler?
 

D²O

BeitragSo, Sep 11, 2005 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
hier mal ein ausschnitt von mir,


Zitat:
510> -9223372036854775808
511> -9223372036854775808
512> -9223372036854775808
513> 9223372036854774784
514> 9223372036854774784
515> 9223372036854774784
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK;

rema

BeitragSo, Sep 11, 2005 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gleicher Ergebnis habe ich auch.

Aber so klappt's, wen man 2 von Anfang an als LONG definiert, sonst wirds als INT berechnet und obwohl "a" als LONG definiert ist, wirds indirekt als INT gehandhabt!

Irgendwie ein BUG

Code: [AUSKLAPPEN]

Local a:Long
Local i:Long

' LONG_MAX = 2^63-1

For i = 1 To 1000
   a = Long(2^63)     ' oder a = Long(2)^63
   Print i+"> "+ (a-i)
Next
 

Dreamora

BeitragSo, Sep 11, 2005 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Randbemerkung:
BM Int ist das was man von C / C++ als Int UND Long kennt
BM Long entspricht long long
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am So, Sep 11, 2005 20:10, insgesamt einmal bearbeitet

rema

BeitragSo, Sep 11, 2005 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber so klappts : a = Long(2^63)

Da ja "a" als LONG definiert wurde, sollte bei Subtraktion eine Veränderung stattfinden, also an ^ sollte es nicht liegen.

Bzw so funzt es auch:

Code: [AUSKLAPPEN]
Local a:Long
Local i:Long

' LONG_MAX = 2^63-1

For i = 1 To 1000
   a = Long(2^63) - i
   Print i+"> "+ (a)
Next


Ist auch klar jetzt wiso:

a = (2^63) -1

2^63 wird als INT behandelt, und von dem wird 1 abgezogen. Darum entsteht nachher ein Rundungsfehler, der nachher auf die Long-Variabel a übertragen wird.

Durch

a = long(2^63) - 1

wird 2^63 gleich in Long gewandelt und es entsteht nach der Subtraktion kein Rundungsfehler mehr.

TheShadow

Moderator

BeitragSo, Sep 11, 2005 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
^ ist ein double operator - also nix mit long - dadurch kommen ungenauigkeiten. benutze doch SHL
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group