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) |