Re: Bug ?! Kategorie: Programmierung (von krassos - 10.12.2004 11:22) | ||
Als Antwort auf Re: Bug ?! von Jörg - 10.12.2004 10:13 | ||
| ||
> 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: |