Seltsamer Fehler beim dividieren von negativen Integern

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

das wurgel

Betreff: Seltsamer Fehler beim dividieren von negativen Integern

BeitragDi, Jan 26, 2010 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich habe einen noch erstaunlicheren Fehler gefunden als den mit der blauen Schrift neulich (link)
Und zwar gibt dieses Programm hier
Code: [AUSKLAPPEN]
bla=-1
Print bla/8
Print bla/9
WaitKey()

einmal 0 und einmal -1 aus, sowohl bei BlitzPlus als auch bei Blitz3D. Es wird manchmal zur 0 hin gerundet und manchmal ab, die Systematik dahinter hab ich noch nicht so ganz herausgefunden, aber ich glaube nicht, dass das beabsichtigt ist. Wenn das kein Fehler ist dann klärt mich bitte auf.
1 ist ungefähr 3

Xeres

Moderator

BeitragDi, Jan 26, 2010 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du teilst Integer... -1.0/8.0 = -0.125, -1/8 = 0
Das Ergebnis ist wenig verwunderlich und genau so zu erwarten. Sobald das Ergebnis >0.5 wird, ist es Gerundet 1.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

das wurgel

BeitragDi, Jan 26, 2010 1:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehs nicht. Ich teile beide Male einen Integer, nur einmal durch 8 und einmal durch 9. Wo liegt der unterschied zwischen -1/8 und -1/9 !?
1 ist ungefähr 3

Noobody

BeitragDi, Jan 26, 2010 1:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das interessante ist, dass das nur funktioniert, wenn der Divisor 2^t entspricht und konstant im Code angegeben wird. Ist der Divisor dynamisch (z.B. in einer Variable, aus einer Berechnung etc.), so funktioniert es nicht.

Kleiner Testcode BlitzBasic: [AUSKLAPPEN]
Local Bla = -1

Print "Konstant:"

Print "Bla/2: " + Bla/2
Print "Bla/4: " + Bla/4
Print "Bla/8: " + Bla/8
Print "Bla/16: " + Bla/16
Print "Bla/32: " + Bla/32
Print "Bla/64: " + Bla/64

Print ""
Print "Dynamisch:"

For I = 1 To 6
Print "Bla/" + ( 1 Shl I ) + ": " + Bla/( 1 Shl I )
Next

WaitKey()
End

Da es wirklich nur mit Zeierpotenzen und konstanten Divisoren funktioniert, tippe ich mal schwer auf einen Fehler im Compiler.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Xeres

Moderator

BeitragDi, Jan 26, 2010 2:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Uhm... na schön, etwas komisch ist es:
BlitzBasic: [AUSKLAPPEN]
Print -1/8
Local b = -1
Print b/8
Print b/16
Print b/32
Print b/64
Print b/128

Print -b/8
Print -b/16
Print -b/32
Print -b/64
Print -b/128

Print -1/8
Print -1/16
Print -1/32
Print -1/64
Print -1/128

WaitKey
Irgendwo bei der Rechnung rutscht das Vorzeichen rüber...
Könnte tatsächlich ein Bug sein. Ist das auf bb.com verzeichnet? Wäre mir bislang nicht aufgefallen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

das wurgel

BeitragDi, Jan 26, 2010 2:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist die gemeinsamkeit die ich gesucht hab. Hatte schon einges rummprobiert, bin aber nicht dahinter gekommen woran es liegt. Gibts iwo ne Liste mit bekannten Bugs in BlitzBasic? Wenns da nicht schon steht wär ein Bugreport recht sinnvoll.

edit:
Kann man sich die Liste auch ansehen wenn man nicht angemeldet ist? Find da iwie keine. Nur das hier:
http://www.blitzbasic.com/faq/faq_entry.php?id=49
1 ist ungefähr 3

Jamagin

BeitragDi, Jan 26, 2010 9:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

bla# = -1
Print bla/8
Print bla/9
WaitKey
End


Mach doch einfach aus bla eine Floatvariable dann gehts!!
Also nicht bla = -1 sondern bla# = -1


lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragDi, Jan 26, 2010 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist uns allen klar, jamagin, hier geht es ja um das fehlerhafte verhalten wenn man ohne Nachkommastellen rechnen will.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Jamagin

BeitragDi, Jan 26, 2010 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner

Aha, wüßte aber nicht wo ich sowas brauchen würde! Na dann hab ich damit nichts zu tun!

Trotzdem -1/9 = 0 bei Integer, wohin soll gerundet werden?

Werde mich wieder zurückziehen...!

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragDi, Jan 26, 2010 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Nuja, es gibt genug Fälle wo man nur gerundete Ergebnisse braucht. Zum Beispiel wenn es um Indizes von Arrays geht - und wenn du nicht von der Nullposition des Arrays iterierst kann auch mal eine negative Berechnung vonnöten sein.

Edit: kaufmännisch gerundet wäre bei 0.5, d.h. -0.5 = -1 ; -0.4 = 0.
Edit 2:Habe zum Thema einen BugReport auf bb.com verfasst.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group