Re: Word Overflow Kategorie: Programmierung Basic (von Stefan - 8.09.2012 9:24) | ||
Als Antwort auf Word Overflow von Stefan - 8.09.2012 7:47 | ||
| ||
> eine simple Rechnung mit Word Variablen führt bei mir > jedesmal ab 2^15 zu Overflow: > > #define Cons 4464 > > Sub Test() > Dim W As Word > Dim I As Integer > For I = 0 To 11 > W = I * Cons > W = W / Cons > > Print_Zahl(W) : Put(Tab) : Print_Zahl(W < 20) : NEWLINE() > Next > End Sub > > mit dem Ergebnis: > > 0 1 > 1 1 > 2 1 > 3 1 > 4 1 > 5 1 > 6 1 > 7 1 > 65530 0 ab hier scheint intern ein Integer Overflow einzutreten. Die Word Grenze > 65531 0 ist noch lange nicht erreicht. Das Flag wird ausgegeben, um auszuschliessen > 65532 0 dass der Fehler bei der Zahlendarstellung eintritt. > 65533 0 > > Was machen? Beim Versuch eine Umgehungslösung zu finden, fiel mir ein weitere Ungereimtheit auf: #define Cons 4464 #define Grenze 31248 Sub Test() Dim W As Word Dim B As Byte Dim I As Integer For I = 0 To 11 W = I * Cons Print_Zahl(W) : Put(Tab) B = 0 If W > Grenze Then B = 1 : W = W - Grenze End If W = W / Cons W = W + 7 * B Print_Zahl(W) : Put(Tab) : Print_Zahl(B) : NEWLINE() Next End Sub ergibt: 0 0 0 4464 1 0 8928 2 0 13392 3 0 17856 4 0 22320 5 0 26784 6 0 31248 7 0 35712 65530 0 Ab hier wieder falsch, "W > Grenze" wird nicht erkannt 40176 65531 0 44640 65532 0 49104 65533 0 Anscheinend verwaltet der Compiler das Word Format intern wie Integer Weiterer Test: #define Cons 4464 #define Grenze 31248 Sub Test() Dim W As Integer Dim B As Byte Dim I As Integer For I = 0 To 11 W = I * Cons Print_Zahl(W) : Put(Tab) B = 0 If W < 0 Then B = 1 : W = W - Grenze End If W = W / Cons W = W + 7 * B Print_Zahl(W) : Put(Tab) : Print_Zahl(B) : NEWLINE() Next End Sub Hier ist W vom Format Integer und es wird bewusst auf Overflow (W < 0) abgefragt. Das Ergebnis in diesem Fall ist richtig. 0 0 0 4464 1 0 8928 2 0 13392 3 0 17856 4 0 22320 5 0 26784 6 0 31248 7 0 35712 8 1 40176 9 1 44640 10 1 49104 11 1 Frage: Wie kann ich mit Word Variablen bei Werten > 2^15 richtig rechnen, vergleichen? | ||
Antwort schreiben Antworten: Re: Word Overflow (von Stefan - 9.09.2012 21:34) Re: Word Overflow (von ThomasK - 10.09.2012 0:08) Re: Word Overflow (von Stefan - 10.09.2012 12:42) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum