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

![]() |
remaBetreff: Problem mit LONG Werten... Bitte mal Code probieren... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
^ ist ein double operator - also nix mit long - dadurch kommen ungenauigkeiten. benutze doch SHL | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group