Division durch 0
-
Hallo
Zum compilieren des Folgenden Codes benutze ich den Compiler aufruf : "gcc -c test.c -DF_CPU=1000000UL"
Nun als Ausgabe erhalte ich dann:
test.c: In function ‘test’:
test.c:19: warning: division by zeroWenn ich jedoch das ganze zuerst mit: "gcc -E test.c -DF_CPU=1000000UL" vom Preprozessor bearbeiten lasse und dann compiliere geht es wunderbar.
Frage wo liegt mein Fehler ich finde ihn nicht.
Danke schon mal für die Hilfe....
edit:
GNU C version 4.0.1#define PRESCALE 8 // PERIOD TIME IN ms #define PERIOD 20 // LOW-PART TIME of the PERIOD in ms #define L_PERIOD 18 // HIGH-PART TIME of the PERIOD in ms #define H_PERIOD PERIOD-L_PERIOD #define ICR (((PERIOD/1000)/(1/(F_CPU/PRESCALE)))/2) void test(void) { int test = ICR; }
-
Du dividierst doch auch durch 0.
1/(F_CPU/PRESCALE) ergibt mit den eingesetzten Werten 0.
-
bei einer division durch 0 kann es zu einem internen fehler innerhalb der CPU kommen, bei dem elektrische Leitungen schmilzen und einen Kurzschluß verursachen können. Immer den Feuerlöscher bereithalten!
-
Mit euren beide Beiträgen wäre ich genau soweit wie vorher....
Wobei mir man jetzt schongesagt hat des es an der Integer..Integer Division liegt....
lg mike
-
Integer-Integer Division bedeutet, dass ein Integer rauskommt.
Ob gerundet oder abgeschnitten wird, ist mehr oder weniger egal.1 / 0 = Division by Zero
1 / |1| = |1|
1 / |2| ergibt |0.5| Bei Rundung ist das 1, bei Cut 0 => Mögliches Problem
1 / |3| ergibt |0.3333...| -> egal wie: 0 => ProblemVerstanden ?
mfg branleb
-
Dem könnte man vorbeugen durch Cast eines Operanden (einer reicht) nach float oder double.
-
Danke, aber gelöst ist das Problem ja schon (Wie ich weiter oben geschrieben habe....)
Ich habe einfach alle Divisor auf float gecasted...
lg mike