Wer kann hier nicht rechnen....

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

pile

Betreff: Wer kann hier nicht rechnen....

BeitragDi, Nov 09, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
.... ich oder mein PC?
Cls
For t=1 To 50000
Print "Das Quadrat von " + t + " ist " + t * t
Next


Warum sind die Ergebnisse ab etwa 47000 negativ?
Wie kann das sein?
Shocked
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

lucifer

BeitragDi, Nov 09, 2004 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt daran das das aus dem Zahlenbereich den Blitzbasic unterstütz rausgeht. Dann fängt der mit -2147483648 wieder von vorne an.
Aktuelles Projekt:
Demonspawn
RPG

pile

BeitragDi, Nov 09, 2004 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, darum wirds ab etwa 80000 oder so auch wieder Positiv... hab mich schon stark gewundert.
Na dann hoff ich mal das ich keine höheren Werte, als die in Basic möglich sind, brauche.
Danke für die schnelle Antwort.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Timo

BeitragDi, Nov 09, 2004 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommazahlen schaffen einen höheren Wert, glaub ich, da sie ja selbst durch mantisse und exponent aufgebaut sind. Aber der normale Wertebereich bis 2^32 sollte eigentlich ausreichen Wink

lucifer

BeitragDi, Nov 09, 2004 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne in der OnlineHilfe steht das Kommazahlen auch nur bis 2 Mrd.. Du bräuchstes schon ne long aber das geht ja glaub ich in BlitzBasic net.
Aktuelles Projekt:
Demonspawn
RPG
 

Timo

BeitragDi, Nov 09, 2004 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah.. habs gefunden...

Also, hier mal kurz die Wertebereiche von den Fließkommazahlen:

Singlereal: +-3.4*10^38 ---- +-1.1*10^-38
Doublereal: +-1.7*10^308 ---- +-2.2*10^-308
Extendetreal: +-1.1*10^4932 ---- +-3.3*10^-4932

BB rechnet mit Singlereal. Der linke Wert bezeichnet das Maximum, der rechte Wert zeigt den kleinsten Anzeigbaren Wert an (also der naheste Wert bei 0)

pile

BeitragDi, Nov 09, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok mir is gerade doch was eingefallen wo sowas zu einem Problem werden könnte.
Angenommen man hat ein Programm das läßt man 25 Tage mit einem Timer laufen dann würde die Rechnung, wenn ich mich nicht ganz irre so aussehen:

1000*60*60*24*25

Die 1000 steht für Milisekunden, da ein Timer ja in mili läuft,60 für Sekunden,60 für Minuten,24 für Stunden und 25 für die Tage. Das ganze Multipliziert und der Timer würde auf einen negativen Wert springen.
Ja ich weiß, 25 Tage is wirklich viel für ein Programm oder Spiel, aber z.B. bei einer Wirtschaftssimulation die ja auch mit Timer läuft und an der man meistens eher lange sitzt könnte das doch passieren oder?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Timo

BeitragDi, Nov 09, 2004 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
aber der timer zählt anders. du kannst zum beispiel eine variable für minuten, für stunden und für tage,etc. nehmen. Millisekunden und Sekunden währe etwas übertrieben oder? Aber selbst wenn du mit den beiden machen willst, kannst du immer noch zwei weiterer Vars nehmen Smile

pile

BeitragDi, Nov 09, 2004 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwa so:
if mili=1000
sekunde=1+1
mili=0
endif
? Hm, müste gehn

Thx
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Timo

BeitragDi, Nov 09, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
nene, pro schleife millisekunden + 1 (zum Beispiel)

wenn millisekunden über 1000, dann minuten+1 und millisekunden=0
wenn sekunden über 60, dann minuten+1 und sekunden=0
...
...

wunderkind

BeitragDi, Nov 09, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
Singlereal: +-3.4*10^38 ---- +-1.1*10^-38
Doublereal: +-1.7*10^308 ---- +-2.2*10^-308
Extendetreal: +-1.1*10^4932 ---- +-3.3*10^-4932


Viel interessanter (und relevanter) wäre es zu wissen, wieviele Stellen bei BB signifikant sind.
  • Zuletzt bearbeitet von wunderkind am Di, Nov 09, 2004 21:38, insgesamt einmal bearbeitet

D2006

Administrator

BeitragDi, Nov 09, 2004 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
6 Stellen

also so:
Code: [AUSKLAPPEN]

5.32304
534.323


MfG

eXceptION

BeitragDi, Nov 09, 2004 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
so... dieser code kann 2 milliarden tage laufen...Code: [AUSKLAPPEN]
Graphics(640, 480, 32, 0)
SetBuffer(BackBuffer())

ms1 = MilliSecs()
msec = 0
sec = 0
min = 0
hour = 0
day = 0

While Not KeyHit(1)

  ms2 = MilliSecs()
  msec = msec + ms2 - ms1
  ms1 = ms2

  If (msec >= 1000) Then
    sec = sec + 1
    If (sec >= 60) Then
      min = min + 1
      If (min >= 60) Then
        hour = hour + 1
        If (hour >= 24) Then
          day = day + 1
          hour = hour - 24
        End If
        min = min - 60
      End If
      sec = sec - 60
    End If
    msec = msec - 1000
  End If

  Cls
  Text(16, 16, day + " " + hour + ":" + min + ":" + sec + "," + msec)
  Flip()

Wend

End
Norweger...

Spreche aber verdammt gut 8086

pile

BeitragDi, Nov 09, 2004 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok,

danke, damit hätte ich das PRoblem mit der Uhr ja zukünftig gelöst...
naja ich meine du hast es gelöst Very Happy
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

eXceptION

BeitragDi, Nov 09, 2004 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked
Norweger...

Spreche aber verdammt gut 8086

BladeRunner

Moderator

BeitragDi, Nov 09, 2004 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
so... dieser code kann 2 milliarden tage laufen...


Leider so nicht korrekt, da Millisecs() alle paar 20 Tage das Vorzeichenbit erreicht und dann von Positiv nach negativ (und umgekehrt) umschlägt.
Da mein rechner 24/7 läuft hatte ich schon öfter das Problem dass alle Millisecs()-Timer dann plötzlich nicht mehr funktionieren.

Aber wer lässt sein Game schon >20 Tage Realzeit laufen... Wink

PS: Beheben lässt sich der Bug wenn man (millisecs() AND $7FFFFFFF) verwendet, da dann dass Vorzeichenbit maskiert ist Wink
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

eXceptION

BeitragDi, Nov 09, 2004 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, nach dem posten habe ich das natürlich auch gesehen... das kann mann aber lediglich mit'ne if..then lösen...
Norweger...

Spreche aber verdammt gut 8086

Ctuchik

BeitragMi, Nov 10, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Das ganze Multipliziert und der Timer würde auf einen negativen Wert springen.
Ja ich weiß, 25 Tage is wirklich viel für ein Programm oder Spiel, aber z.B. bei einer Wirtschaftssimulation die ja auch mit Timer läuft und an der man meistens eher lange sitzt könnte das doch passieren oder?

Bei Windows 98 wars so, dass der Timer der die Millisekunden zählt ein Wert ohne Vorzeichen war, also doppelt so groß wie die Variablen in BlitzBasic werden konnte! Wenn Windows dann 49,7 Tage am Stück lief wurde die Zahl zu groß und Windows ist abgestürzt Twisted Evil Twisted Evil Tjaja, der Bug wurde dann in der Second Edition behoben Very Happy
(aber mal im ernst, wer schafft es win98 50 Tage lang ohne einen Absturz laufen zu lassen? Smile)
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

pile

BeitragMi, Nov 10, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blade
Das ist doch genau das Problem was ich vorher angesprochen habe. Es müßten aber 25 Tage sein damit sich der Timer ins negative umstellt.
Und du denkst mit deiner Lösung geht es? Na ich hoffe mal Wink
Nur wo setzte ich (millisecs() AND $7FFFFFFF) ein? Gleich am Anfang bei (ms1 = MilliSecs()) ?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group