Re: Rechenfehler bei Berechnung????? Kategorie: Programmierung (von André H. - 29.07.2003 13:34) | |
Als Antwort auf Rechenfehler bei Berechnung????? von robbe - 29.07.2003 12:34
| |
Hallo Robbe, Die Lösung/Ursache ist ganze einfach zu erklären: Alle Rechenoperationen werden Grundsätzlich in 16Bit ausgeführt, au�er es wird durch einen Variabeltyp oder einer Konstante ein Anderer Typ vorgegenen (long/float). Das Problem bei Deinem Proggie liegt hier: system.hour() * 3600 Dies wird in einer 16Bit Operation ausgeführt: 11*3600 ergibt hier -25936 (0x9AB0 bzw. 39600-65536=-25936) Damit das Ergebnis korrekt ist, mu� einer der beiden Multiplikatoren vom Typ long sein. Das passiert genau in Deiner Berechnung: noww = system.day() * 86400 + system.hour() * 3600 + system.minute() * 60 + system.second(); Datentyp: Integer long Integer Integer Integer Integer Integer So rechnet hier die CC2:(übersichtlich dargestellt) noww = 1* 86400 + 11* 3600 + 45* 60 + system.second(); noww = 86400 + (-25936)+ 2700 + 0; Datentyp: long Integer Integer Integer noww = 60464 + 2700 + 0; Datentyp: long Integer Integer noww = 63164 + 0; Datentyp: long Integer noww = 63164; Datentyp: long Dies waren jetzt die gesamten Zwischenschritte. Dein Programm müsste so aussehen, damit die Berechnung korrekt läuft: long noww; string s; thread main { lcdext.init(); system.setdate(2003,8,1); system.settime(11,45,0); noww=system.hour(); noww=system.day()*86400 + noww*3600 + system.minute()*60 + system.second(); s = ""; str.putlong(s,noww); lcdext.print(s); quit 1; } So wird bei der Berechung system.hour() * 3600 der Wert von system.hour() gleich in einem long gespeichert und auch so behandelt. MfG André H. > Hallo, > Ich habe folgendes Problem: > > Bei einer Berechnung bekomme ich immer ein falsches Ergebnis raus. > > Hier mein Programm: > > long noww; > string s; > > thread main > { > lcdext.init(); > system.setdate(2003,8,1); > system.settime(11,45,0); > noww = system.day() * 86400 + system.hour() * 3600 + system.minute() * 60 + system.second(); > lcdext.clear(); > s = ""; > str.putlong(s,noww); > lcdext.print(s); > halt; > } > > > Auf meinem Display steht immer 63164. Rechne ich das aber mit meinem Taschenrechner aus, kommt 128700 raus wie kann das sein ??? > > > Kann mir jemand helfen?? > > Robbe. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Re: Rechenfehler bei Berechnung????? (von Robbe - 29.07.2003 13:47) |