Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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?