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

long Arithmetik Bug(?) Kategorie: Programmierung (von Reto - 3.01.2003 14:36)


Beim Rechnen mit verschiedenen Integer-Formaten im Zusammenhang mit
einem Date/Time Modul habe ich folgenden Bug(?) entdeckt:

Example:

  const SECONDS_PER_HOUR = 3600;
  long  seconds_per_hour;
  int   h;
  long  l;

  // Init
  seconds_per_hour = SECONDS_PER_HOUR;
  h = 24;

  // 3 different ways of the same "long" operation
  //
  l = SECONDS_PER_HOUR * 24;  // case 1: correct, l = 86400
  l = seconds_per_hour * h;   // case 2: correct, l = 86400
 
  // but...
  l = SECONDS_PER_HOUR * h;   // case 3:
Es scheint, dass die long-Arithmetik im Fall 3 fehl schlägt. Anstatt eine long-Operation
auszuführen, wird vermutlich eine int-Operation gemacht und anschliessend ein long-Wert
zurückgegeben.

Komischerweise funktioniert's, wenn die beiden Operanden (SECONDS_PER_HOUR, 24) vom Typ
int (oder einer sogar byte?) sind (Fall 1).

Es funktioniert einigermassen logischerweise auch (Fall 2), wenn die eine "Konstante"
zuerst einer long-Variable zugewiesen wird.


- Weiss jemand eine Erklärung oder findet das Verhalten gar logisch?
- Muss bei long-Operationen wirklich immer explizites "type casting" angewendet
  werden (das ja eigentlich nicht einmal in C2 enthalten ist)?

Danke für Eure Unterstützung
Reto


    Antwort schreiben


Antworten:

Re: long Arithmetik Bug(?) - ist kein Bug (von André H. - 3.01.2003 16:01)
    Re: long Arithmetik Bug(?) - ist kein Bug (von Reto - 3.01.2003 16:32)