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

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)