Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Bug ?! Kategorie: Programmierung (von krassos - 10.12.2004 11:22)
Als Antwort auf Re: Bug ?! von Jörg - 10.12.2004 10:13
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
> Das kann's nicht sein. 9 * 100.000, 4 * 1.000.000 ... klappt ja!
> Wird wohl schon irgendwo ein Bug sein. Naja, läuft ja jetzt.

Hallo,

Das mit dem Bug wird wohl sein.
Bei 4*10000 entsteht in der Rechnung ein INT-Ã?berlauf.
bei 9*100000 sind die 100000 schon long. Dadurch kann es sein, das der Compiler
den richtigen Datentyp beibehält.
Bei 4*10000 wählt der Compiler auf jeden Fall den falschen Typ.
Der Fehler ist bekannt-siehe André's FAQ. Ich fall aber auch öfter drauf rein.

GruÃ? krassos



>
> Thanx für deine Zeit Hansi
>
>
> >
> > Hallo Jörg,
> >
> > ja ist schon komisch, aber Du hast geschrieben bei Werten bis 3 funktioniert es, dann nicht mehr.
> > Eine Integer-Variable kann 3*10.000 noch aufnehmen, bei 4*10.000 brauchst Du halt den Typ Long.
> >
> > Bye Hansi   ...einfach ausprobieren
> >
> > > Hi Hansi.
> > >
> > > Hat natürlich was der Ansatz mit Byte und Long Variablen.
> > > Ist bestimmt sicherer erst mit: tempvar = (getchar(faktor, 8) - 48);
> > >
> > > (ev. besser noch:
> > > tempbyte = (getchar(faktor, 8) - 48);
> > > tempvar = tempbyte; und weiterrechnen)
> > >
> > > die Typ-Konvertierung durchzuführen und dann zu rechnen.
> > >
> > > Unlogisch ist dabei eigentlich nur der Effekt, dass es 7x klappt und 1x nur bei Byte-Wert 48 - 51.
> > >
> > > Jörg
> > >
> > >
> > >
> > > >
> > > > Hallo Jörg,
> > > >
> > > > die Funktion getchart() liefert Dir Integer / Byte zurück und Deine Berechnungen nutzen
> > > > den Typ long.
> > > >
> > > > Ã?bergebe vor Deinen Berechnungen den Wert von getchar() an eine long-Variable und
> > > > rechne damit weiter oder la� von getchar() ein Typ long zurück geben, dann sollte es
> > > > klappen.
> > > >
> > > > GruÃ? Hansi
> > > >  
> > > >
> > > > > Effekte, welche 5h Fehlersuche zur Folge haben:
> > > > >
> > > > > --------------------------------------------------------------------------
> > > > >
> > > > > function getchar(byte s[], int position) returns byte
> > > > > {
> > > > >  return s[position];
> > > > > }
> > > > >
> > > > > function para3(long kafaktor) returns long
> > > > > {
> > > > >  string faktor;
> > > > >  long tempvar;
> > > > >
> > > > >  faktor = "K-Fa:00000000";
> > > > >
> > > > > // ... Benutzereingabe des K-Faktors
> > > > >
> > > > >  kafaktor = 10000000 * (getchar(faktor, 5) - 48);
> > > > >  tempvar = 1000000 * (getchar(faktor, 6) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  tempvar = 100000 * (getchar(faktor, 7) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  
> > > > >  tempvar = (getchar(faktor, 8) - 48);
> > > > >  tempvar = tempvar * 10000;
> > > > > // funktioniert immer
> > > > >
> > > > > // tempvar = 10000 * (getchar(faktor, 8) - 48);
> > > > > // funktioniert nicht, wenn (getchar(faktor, 8) - 48) einen Wert > 3 liefert
> > > > > // --- ??? ---
> > > > >
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  tempvar = 1000 * (getchar(faktor,9) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  tempvar = 100 * (getchar(faktor,10) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  tempvar = 10 * (getchar(faktor,11) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >  tempvar = (getchar(faktor,12) - 48);
> > > > >  kafaktor = kafaktor + tempvar;
> > > > >
> > > > >  return kafaktor;
> > > > > }
> > > > >
> > > > > -------------------------------------------------------------
> > > > >
> > > > > Jemand 'ne logische Erklärung dafür?
> > > > >
> > > > > Ein fast wahnsinnig gewordener
> > > > > Jörg


    Antwort schreiben


Antworten: