Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Word Overflow Kategorie: Programmierung Basic (von Stefan - 9.09.2012 21:34)
Als Antwort auf Re: Word Overflow von Stefan - 8.09.2012 9:24
Ich nutze:
C-Control Pro Mega32
> > 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?

Fehler: Natürlich sind es die Werte > 2^14 und < 2^15 mit denen ich rechnen will.


    Antwort schreiben


Antworten:

Re: Word Overflow (von ThomasK - 10.09.2012 0:08)
    Re: Word Overflow (von Stefan - 10.09.2012 12:42)